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

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 it
StrategyB 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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值