策略模式

1、从项目'模拟鸭子游戏'开始
2、从OO的角度设计这个项目,鸭子超类,扩展超类:
public abstract class Duck{
    public void Quack(){
        System.out.println("~~gaga~~");
    }
    public abstract void display();
    public void swim(){
        System.out.println("~~im swin~~");
    }
}

public class GreenHeadDuck extends Duck{
    @Override
    public void display(){
        System.out.println("~~GreenHeadDuck~~");
    }
}
3、现在添加一个飞的功能
public abstract class Duck{
    public void Quack(){
        System.out.println("~~gaga~~");
    }
    public abstract void display();
    public void swim(){
        System.out.println("~~im swin~~");
    }
    /**
     *添加个新的方法
     */
    public void fly(){
        System.out.println("~~im fly~~");
    }
}
这样导致子类没有该方法,要重新复写。为了解决该问题,创建一个飞行的借口
public interface FlyBehavior{
    public void fly();
}

public abstract class Duck{
    FlyBehavior flyBehavior;
    public Duck(){}
    public void Quack(){
        System.out.println("~~gaga~~");
    }
    public abstract void display();
    public void swim(){
        System.out.println("~~im swin~~");
    }
    /**
     *添加个新的方法
     */
    public void fly(){
        flyBehavior.fly();
    }
}

public class GreenHeadDuck extends Duck {
    FlyBehavior flyBehavior;
    public GreenHeadDuck() {
         flyBehavior = new GoodFlyBehavior();
    }

    @Override
    public void fly() {
        flyBehavior.fly();
    }
}

public static void main(String[] args) {
        Duck greenHeadDuck = new GreenHeadDuck();
        greenHeadDuck.fly();
}
或者GreenHeadDuck可以用get/set方法来处理。
总结:封装行为为接口。


你可能感兴趣的:(策略模式)