首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > 移动开发 >

对策模式

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

策略模式
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).策略模式造成很多的策略类。
 


热点排行