设计模式-策略模式

在软件开发中,我们经常遇到针对不同情况使用不同的算法或者逻辑,然后用if/else来控制起来,我们来看个例子,比如说国足要征战世界杯亚洲区12强赛,那么针对不同对手,需要有不同的打法和战术

public void test(String duishou){
        if(duishou.equals("韩国")){
            System.out.println("执行防守反击战术");
        }else if(duishou.equals("伊朗")){
            System.out.println("组织配合,一脚传递,中路渗透");
        }else if(duishou.equals("卡塔尔")){
            System.out.println("边路传中,45度炸");
        }
    }

一般我们都会这样写,逻辑很清晰,那么在对阵其他对手,比如叙利亚,乌兹别克斯坦时什么战术呢,可能就需要修改这个封装战术的类,或者增加很多if/else,维护起来比较麻烦,这个时候就可以使用策略类了,策略类的好处是把每种策略都封装成独立的类,在执行策略的时候也很方便,不用这么多if/else了
角色:
环境类(Context):维护一个对Strategy对象的引用
抽象策略类(Strategy):定义所有支持的算法的公共接口。 Context使用这个接口来调用某具体策略类定义的算法。
具体策略类:以Strategy接口实现某具体算法。

例子:

/*
 * Strategy抽象策略角色
 */
public interface Strategy {

    public void zhanshu();

}

/*
 * 对阵韩国队
 */
public class VsKorea implements Strategy{

    @Override
    public void zhanshu() {
        // TODO Auto-generated method stub
        System.out.println("执行防守反击战术");
    }

}

/*
 * 对阵伊朗队
 */
public class VsIran implements Strategy{

    @Override
    public void zhanshu() {
        // TODO Auto-generated method stub
        System.out.println("组织配合,一脚传递,中路渗透");
    }

}
/*
 * 对阵卡塔尔队
 */
public class VsQatar implements Strategy {

    @Override
    public void zhanshu() {
        // TODO Auto-generated method stub
        System.out.println("边路传中,45度炸");
    }

}

public class Context {

    private Strategy strategy;

    public Context(Strategy strategy) {
        this.strategy = strategy;
    }
    public void zhixingzhanshu(){
        this.strategy.zhanshu();
    }
}

public class MainClient {

    public static void main(String[] args){
        Strategy strategy = new VsIran();
        Context context = new Context(strategy);
        context.zhixingzhanshu();

    }

}

运行结果:

组织配合,一脚传递,中路渗透

好了,设计模式-策略模式就总结到这里,如有问题,欢迎指正,谢谢。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值