策略模式

来源:互联网 发布:网络机房都有什么设备 编辑:程序博客网 时间:2024/06/03 23:42

策略模式

定义了算法族,分别封装起来,让他们之间可以相互替换,此模式让算法的变化独立于使用算法的客户

设计原则

找出应用中可能需要改变之处,把他们独立出来,不要和那些不需要变化的代码混在一起。

针对接口编程而不是针对实现编程

多用组合少用继承

下面是一个策略模式的代码,当做例子:

duck抽象类:

package design;/** * @author Mingming * @Description * @Date Created in 13:48 2017/10/29 * @Modificd By */public abstract class Duck {    FlyBehavior flyBehavior;    QuackBehavior quackBehavior;    public abstract void display();    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实现类:

package design;/** * @author Mingming * @Description * @Date Created in 13:56 2017/10/29 * @Modificd By */public class ModelDuck extends Duck {    @Override    public void display() {        System.out.println("I am a ModelDuck");    }}

FlyBehavior接口:

package design;/** * @author Mingming * @Description * @Date Created in 13:48 2017/10/29 * @Modificd By */public interface FlyBehavior {    public void fly();}

FlyBehavior实现

package design;/** * @author Mingming * @Description * @Date Created in 13:49 2017/10/29 * @Modificd By */public class FlyEithWings implements FlyBehavior{    @Override    public void fly() {        System.out.println("I am flying");    }}package design;/** * @author Mingming * @Description * @Date Created in 13:50 2017/10/29 * @Modificd By */public class FlyNoway implements FlyBehavior{    @Override    public void fly() {        System.out.println("I can't fly");    }}

QuackBehavior接口:

package design;/** * @author Mingming * @Description * @Date Created in 13:51 2017/10/29 * @Modificd By */public interface QuackBehavior {    public void quack();}

QuackBehavior实现:

package design;/** * @author Mingming * @Description * @Date Created in 13:51 2017/10/29 * @Modificd By */public class Quack implements QuackBehavior {    @Override    public void quack() {        System.out.println("Quack");    }}package design;/** * @author Mingming * @Description * @Date Created in 13:52 2017/10/29 * @Modificd By */public class Squeak implements QuackBehavior {    @Override    public void quack() {        System.out.println("squeak");    }}

测试类:

package design;/** * @author Mingming * @Description * @Date Created in 13:56 2017/10/29 * @Modificd By */public class MiniDuckSimulator {    public static void main(String[] args){        ModelDuck modelDuck = new ModelDuck();        modelDuck.setFlyBehavior(new FlyEithWings());        modelDuck.setQuackBehavior(new Quack());        modelDuck.display();        modelDuck.performFly();        modelDuck.performQuack();    }}
原创粉丝点击