Head First 设计模式(1):策略模式

来源:互联网 发布:唯歌生民病 愿得天子知 编辑:程序博客网 时间:2024/06/05 20:07

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

例子:

代码:

package headfirst.designpatterns.strategy;public abstract class Duck {FlyBehavior flyBehavior;QuackBehavior quackBehavior;public Duck() {}public void setFlyBehavior(FlyBehavior fb) {flyBehavior = fb;}public void setQuackBehavior(QuackBehavior qb) {quackBehavior = qb;}abstract void display();public void performFly() {flyBehavior.fly();}public void performQuack() {quackBehavior.quack();}public void swim() {System.out.println("All ducks float, even decoys!");}}public interface FlyBehavior {    public void fly();}public interface QuackBehavior {    public void quack();}public class MallardDuck extends Duck {    public MallardDuck() {        quackBehavior = new Quack();        flyBehavior = new FlyWithWings();    }    public void display() {        System.out.println("I'm a real Mallard duck");    }}public class RedHeadDuck extends Duck {     public RedHeadDuck() {        flyBehavior = new FlyWithWings();        quackBehavior = new Quack();    }     public void display() {        System.out.println("I'm a real Red Headed duck");    }}public class RubberDuck extends Duck {     public RubberDuck() {        flyBehavior = new FlyNoWay();        quackBehavior = new Squeak();    }     public void display() {        System.out.println("I'm a rubber duckie");    }}public class DecoyDuck extends Duck {    public DecoyDuck() {        setFlyBehavior(new FlyNoWay());        setQuackBehavior(new MuteQuack());    }    public void display() {        System.out.println("I'm a duck Decoy");    }}public class ModelDuck extends Duck {    public ModelDuck() {        flyBehavior = new FlyNoWay();        quackBehavior = new Quack();    }    public void display() {        System.out.println("I'm a model duck");    }}public class FlyWithWings implements FlyBehavior {    public void fly() {        System.out.println("I'm flying!!");    }}public class FlyNoWay implements FlyBehavior {    public void fly() {        System.out.println("I can't fly");    }}public class FlyRocketPowered implements FlyBehavior {    public void fly() {        System.out.println("I'm flying with a rocket");    }}public class Quack implements QuackBehavior {    public void quack() {        System.out.println("Quack");    }}public class Squeak implements QuackBehavior {    public void quack() {        System.out.println("Squeak");    }}public class MuteQuack implements QuackBehavior {    public void quack() {        System.out.println("<< Silence >>");    }}public class FakeQuack implements QuackBehavior {    public void quack() {        System.out.println("Qwak");    }}public class MiniDuckSimulator {     public static void main(String[] args) {         MallardDuck    mallard = new MallardDuck();        RubberDuck    rubberDuckie = new RubberDuck();        DecoyDuck    decoy = new DecoyDuck();         Duck     model = new ModelDuck();        mallard.performQuack();        rubberDuckie.performQuack();        decoy.performQuack();           model.performFly();            model.setFlyBehavior(new FlyRocketPowered());        model.performFly();    }}


0 0
原创粉丝点击