对策模式
策略模式
1. 策略模式,定义了算法族,分别封装起来,让它们之间可以互相转换,此模式让算放的变化独立于使用算法的客户。
2.================例子=========================================
3.使用场景:
1).一个系统需要动态地让一个对象在许多行为中选择一种行为。
2).一个系统需要动态地在几种算法中选择一种。
3).一个系统的算法使用的数据不可以让客户端知道。
4).避免使用难以维护的多重条件选择语句。
5).以不同的格式保存文件。
6).以不同的算法压缩文件。
7).以不同的算法截获图象。
.以不同的格式输出同样数据的图形,比如曲线 或框图bar等。
4.优点:
1).提供了管理相关的算法族的办法。
2).提供了可以替换继承关系的办法。
3).可以避免使用多重条件转移语句。
5.缺点:
1).客户端必须知道所有的策略类,并自行决定使用哪一个策略类。
2).策略模式造成很多的策略类。
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 { @Override public void fly() { System.out.println("I am flying"); } }
public class FlyNoWay implements FlyBehavior { @Override public void fly() { System.out.println("I can't flay"); } }
public interface QuackBehavior { public void quack(); }
public class Quack implements QuackBehavior { @Override public void quack() { System.out.println("I am quack"); } }
public class MuteQuack implements QuackBehavior { @Override public 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).以不同的算法截获图象。
4.优点:
1).提供了管理相关的算法族的办法。
2).提供了可以替换继承关系的办法。
3).可以避免使用多重条件转移语句。
5.缺点:
1).客户端必须知道所有的策略类,并自行决定使用哪一个策略类。
2).策略模式造成很多的策略类。