策略模式

来源:互联网 发布:淘宝店如何开通直通车 编辑:程序博客网 时间:2024/05/24 22:43

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

[]类图

[]策略模式的实现

飞行为接口

public interface FlyBehavior {void fly();}

飞行为实现类

public class FlyWithWings implements FlyBehavior {@Overridepublic void fly() {    System.out.println("I' m flying!!");}}

飞行为实现类

public class FlyNoWay implements FlyBehavior {@Overridepublic void fly() {    System.out.println("I can't fly");}}

飞行为实现类

public class FlyRocketPowered implements FlyBehavior {@Overridepublic void fly() {    System.out.println("I' m flying with a rocket!!");}}

叫行为接口

public interface QuackBehavior {void quack();}

叫行为实现类

public class Quack implements QuackBehavior {@Overridepublic void quack() {    System.out.println("Quack");}}

叫行为实现类

public class MuteQuack implements QuackBehavior {@Overridepublic void quack() {    System.out.println("Slience");}}

叫行为实现类

public class Squeak implements QuackBehavior {@Overridepublic void quack() {    System.out.println("Squeak");}}

鸭子抽象类

public abstract class Duck {protected FlyBehavior flyBehavior;protected QuackBehavior quackBehavior;public abstract void display();public void performFly() {    flyBehavior.fly();}public void performQuack() {    quackBehavior.quack();}public void swim() {    System.out.println("All ducks float,event decoys");}public void setFlyBehavior(FlyBehavior flyBehavior) {    this.flyBehavior = flyBehavior;}public void setQuackBehavior(QuackBehavior quackBehavior) {    this.quackBehavior = quackBehavior;}}

鸭子实现类

public class MallardDuck extends Duck {public MallardDuck() {    flyBehavior = new FlyWithWings();    quackBehavior = new Quack();}@Overridepublic void display() {    System.out.println("I'm a reak Mallard duck");}}

鸭子实现类

public class ModelDuck extends Duck {public ModelDuck() {    flyBehavior = new FlyNoWay();    quackBehavior = new Quack();}@Overridepublic void display() {    System.out.println("I'm a model duck");}}

测试

public static void main(String args[]) {    MallardDuck mallardDuck = new MallardDuck();    mallardDuck.display();    mallardDuck.performFly();    mallardDuck.performQuack();    ModelDuck modelDuck = new ModelDuck();    modelDuck.display();    modelDuck.performFly();    modelDuck.performQuack();    modelDuck.setFlyBehavior(new FlyRocketPowered());    modelDuck.performFly();}

[]