标签:不同的 extend 接口 enc model 将不 nts head package
package DesignPattern;
public class StrategePattern {
//来自HeadFirst设计模式
interface FlyBehavior{
//将飞行行为抽象为接口
void fly();
}
interface QuackBehavior{
//将鸭子叫抽象为接口
void quack();
}
//下面将不同的飞行和鸭子叫封装为行为
//飞行行为
static class FlyWithWings implements FlyBehavior{
@Override
public void fly(){
System.out.println("i fly with wings");
}
}
static class FlyNoWay implements FlyBehavior{
@Override
public void fly() {
System.out.println("i can not fly!");
}
}
//鸭子叫行为
//呱呱叫
static class Quack implements QuackBehavior{
@Override
public void quack() {
System.out.println("quack!");
}
}
//吱吱叫
static class Squeak implements QuackBehavior{
@Override
public void quack() {
System.out.println("squeak!");
}
}
//不会叫
static class MuteQuack implements QuackBehavior{
@Override
public void quack() {
System.out.println("<silence>");
}
}
//整合行为
public static class Duck{
FlyBehavior flyBehavior;
QuackBehavior quackBehavior;
public void setFlyBehavior(FlyBehavior flyBehavior){
this.flyBehavior=flyBehavior;
}
public void setQuackBehavior(QuackBehavior quackBehavior){
this.quackBehavior=quackBehavior;
}
public void performQuack(){
quackBehavior.quack();
}
public void performFly(){
flyBehavior.fly();
}
}
//某个Duck子类
public static class MallardDuck extends Duck{
MallardDuck(){
this.flyBehavior=new FlyWithWings();
this.quackBehavior= new Quack();
}
}
public static void main(String[] args) {
Duck model = new MallardDuck();
model.performFly();
model.performQuack();
//通过set方法可以动态改变鸭子行为
model.setQuackBehavior(new Squeak());
model.performQuack();
}
/*
通过封装行为,将鸭子和(飞行,叫)两个行为解耦,带来的好处
1.实现行为接口就可以添加新行为,符合要扩展不要更改的设计原则
2.可以自由组合(飞,叫)行为,提高了行为代码的可重用性
*/
}
标签:不同的 extend 接口 enc model 将不 nts head package
原文地址:https://www.cnblogs.com/zhouyu0-0/p/10724319.html