操作型模式之Strategy(策略)模式

来源:互联网 发布:office替代软件 编辑:程序博客网 时间:2024/05/22 09:49

1.如果你期望封装一个操作,使其实现可以互相替换,可使用Strategy(策略)模式
2.举例

//策略抽象类public abstract class Strategy {    abstract void doIt();}
//策略A类public class StrategyA extends Strategy{    @Override    void doIt() {        // TODO Auto-generated method stub        System.out.println("StrategyA do it");    }}
//策略B类public class StrategyB extends Strategy{    @Override    void doIt() {        // TODO Auto-generated method stub        System.out.println("StrategyB do it");    }}
//策略管理者:根据传来的策略类来决定使用哪个策略public class ContextManager {    private Strategy strategy;    public ContextManager(Strategy strategy) {        // TODO Auto-generated constructor stub        this.strategy = strategy;    }    public void doSomethings(){        strategy.doIt();    }}
//测试类:需要用户知道具体拥有哪些策略类public class Test {    public static void main(String[] args) {        Strategy sa = new StrategyA();        Strategy sb = new StrategyB();        ContextManager cma = new ContextManager(sa);        cma.doSomethings();        ContextManager cmb = new ContextManager(sb);        cmb.doSomethings();    }}
//结果StrategyA do itStrategyB do it

3.总结:Strategy(策略模式)模块的意图在于把可选的策略或方案封装在不同的类中,并在这些类中实现一个共同的操作。通过将可选的策略封装在单独的类中,并让每个类都实现一个共同的操作,我们可通过该模式创建一系列整洁而又简单的代码,以此来完成对各种解决问题的方案的建模。
4.Strategy(策略)模式与State(状态)模式区别
4.1 在对状态进行建模的时候,状态迁移是一个重要的方面;而在对策略进行建模的时候,迁移与策略的选择并不相关。
4.2 Strategy(策略)模式可能允许客户选择或者提供一个策略,而State(状态)模式无需客户知道具体状态。
5.参考:http://www.cnblogs.com/java-my-life/archive/2012/05/10/2491891.html

0 0