java 设计模式--策略模式(strategy)

来源:互联网 发布:贝尔狂虐伊莲娜 知乎 编辑:程序博客网 时间:2024/04/30 22:05

策略模式的官方定义是:

策略模式定义了算法族,分别封装起来,让他们之间可以互相替换,此模式让算法的边哈独立于使用算法的客户。有点抽象,使用head first  设计模式的鸭子例子来解释就比较清楚了。

设计原则:

1. 把需要变化之处,独立出来,和那些不要变化的代码分开。

2. 针对接口编程,而不是针对实现编程。

鸭子的行为,飞和呱呱叫分别设计成2个独立的接口,不同的实现,比如不能飞,用火箭飞等实现飞的接口。呱呱叫也一样,有的鸭子会叫,有的不会叫。



具体代码实现:

飞接口

public interface FlyBehavior {    public void fly();}
呱呱叫接口

public interface QuackBehavior {    void quack();}

会飞的实现,继承了飞接口
public class FlyWithWings implements FlyBehavior {    @Override    public void fly() {        System.out.println("i'm fly");        //To change body of implemented methods use File | Settings | File Templates.    }}
不会飞的实现,也继承飞接口

public class FlyNoWay implements FlyBehavior{    @Override    public void fly() {        System.out.println("I can't fly");        //To change body of implemented methods use File | Settings | File Templates.    }}

鸭子类,鸭子会飞,会叫。

public abstract class Duck {    FlyBehavior flyBehavior;    QuackBehavior quackBehavior;    public Duck(){    }    public abstract void display();    public void performQuack(){        quackBehavior.quack();    }    public void swim(){        System.out.println("All duck can swim");    }    public void performFly() {        //To change body of created methods use File | Settings | File Templates.    }}

具体的鸭子,每种鸭子不同的飞状态和叫声。

public class MallardDuck extends Duck {    public MallardDuck(){        quackBehavior = new Quack();        flyBehavior = new FlyWithWings();    }    @Override    public void display() {        System.out.println("i'm a real mallard duck");        //To change body of implemented methods use File | Settings | File Templates.    }}





原创粉丝点击