策略模式

优点:
简单工厂模式主要解决类的创建时候的耦合问题.
策略模式定义了算法家族并分别封装起来,让他们之间可以互相替换.而算法的改变,不会影响算法的使用者.

Demo:实现一个简单的三十六计计策类

//创建一个计策抽象类
public abstract class Strategy {
    public abstract void work();
//破釜沉舟
public class FightStrategy extends Strategy {
    @Override
    public void work() {
        Log.d("meee",getClass()+":\n"+"三十六计 之 破釜沉舟");
    }
}
//最后一计
public class RunStrategy extends Strategy {
    @Override
    public void work() {
        Log.d("meee",getClass()+":\n上计");
`
    }
//上下文类,可以以军师来理解
public class StrategyContext {
    Strategy mStrategy;

    public StrategyContext(Strategy strategy) {
        mStrategy = strategy;
    }
    public void setStrategy(Strategy strategy){
        mStrategy = strategy;
    }
    public void work(){
        mStrategy.work();
    }
}
持有军师这个对象,只调用StrategyContext.work()即可,不需要关心怎么实现的

使用场景

几乎可以封装任何类型,只要在分析过程中听到需要在不同的时间应用不同的业务规则,就可以考虑使用策略模式来处理这种变化的可能性

策略模式和简单工厂模式的结合使用

在基本的策略模式中,选择所用的具体实现的职责还是有调用者来实现.那么,如果指挥官很菜怎么办?就不能由军师自己选择计策吗?

Demo

//将选择策略的职责交给军师
public class StrategyContextWithSimpleFactory {
    Strategy mStrategy;

    public StrategyContextWithSimpleFactory(String status) {
        setStrategy(status);
    }
    public void setStrategy(String status){
        switch (status){
            case "敌方大军压境!":
                mStrategy=new RunStrategy();
                break;
            case "我军逃无可逃了!":
                mStrategy=new FightStrategy();
                break;
        }
    }
    public void dealwith(){
        mStrategy.work();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值