读书人

对策模式

发布时间: 2012-08-10 12:19:33 作者: rapoo

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

2.================例子=========================================

public abstract class Duck {FlyBehavior flyBehavior;QuackBehavior quackBehavior;public Duck(){}public void performFly(){flyBehavior.fly();}public void performQuack(){quackBehavior.quack();}public void setFlyBehavior(FlyBehavior fb){flyBehavior = fb;}public void setQuackBehavior(QuackBehavior qb){quackBehavior = qb;}}


public class MallardDuck extends Duck {public MallardDuck(){quackBehavior = new Quack();flyBehavior = new FlyWithWings();}}


public interface FlyBehavior {public void fly();}


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


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


public interface QuackBehavior {public void quack();}


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


public class MuteQuack implements QuackBehavior {@Overridepublic void quack() {System.out.println("I can't quack");}}



public class MiniDuckSimulator {       //测试public static void main(String[] args) {Duck model = new ModelDuck();model.performFly();model.setFlyBehavior(new FlyRocketPowered());model.performFly();}}


3.使用场景:
1).一个系统需要动态地让一个对象在许多行为中选择一种行为。
2).一个系统需要动态地在几种算法中选择一种。
3).一个系统的算法使用的数据不可以让客户端知道。
4).避免使用难以维护的多重条件选择语句。
5).以不同的格式保存文件。
6).以不同的算法压缩文件。
7).以不同的算法截获图象。
.以不同的格式输出同样数据的图形,比如曲线 或框图bar等。

4.优点:
1).提供了管理相关的算法族的办法。
2).提供了可以替换继承关系的办法。
3).可以避免使用多重条件转移语句。

5.缺点:
1).客户端必须知道所有的策略类,并自行决定使用哪一个策略类。
2).策略模式造成很多的策略类。



读书人网 >移动开发

热点推荐