策略模式从无知到无畏

浅谈策略模式

策略模式是一个特殊的存在,很多设计模式的初学者都喜欢把她当成第一个去掌握的模式,因为觉得这个模式就像简单工厂模式那样简单,甚至很多时候都会有人问她与简单工厂或者工厂模式有什么区别,今天这个话题就是围绕这个话题来展开的。
策略模式与工厂模式有什么区别呢?首先我想从字面理解,一个是策略一个是工厂。思想维度就有很大的区别,工厂只是生产产品的,说白了就是工人,领导让你干啥你就干啥,无论你生产的产品过程有多么复杂,你就是个技术工种。策略是什么,往大了说是战略,一个战略是可以决定许多的产品是否还需要被创建或者使用,你说这里面的区别大不大,如果光从基础的代码实现上来说,二者的区别还真不大,关键是代码的使用和这段代码到底放到了哪个位置上。
策略模式很多的教材中都把她用来封装算法,按照不同维度计算个税率,工资,奖金,积分啥的,我觉得有点狭隘, 今天我想说一说应用系统的角色,比如说处长,科长和股长,在应用系统的驾驶舱,不同的角色看到的内容是完全不同的,这个就是不同的策略,然后往下说,请假审批,资金审批和系统与角色相关的操作都需要使用策略模式来处理,否则就会出现一个问题,系统来了个新角色比如局长,他来了,如果不用策略模式,我们就需要在所有涉及到角色处理的代码中再增加一个else来判断角色,一个系统可能有10处这样的代码,你改不过来,也不改改,线上系统这么改还能用么,这个时候还是要用策略模式,增加一个新的角色,多创建出来一些新的类,满足开闭原则,不会影响到其他角色之前的处理,何乐而不为呢。
接下来再具体一些,说说策略模式的代码实现,
首先涉及到几个主要的类:

  1. context 上下文,这个相当关键,一般来说要把角色放到这里,也就决定了到底要用那种策略,你说关键不。
  2. strategy 可以是个抽象类或者是接口,定义策略接口,我觉得这里面可以把跟策略有关的方法都写在这个接口中,但是又好像不满足接口隔离的原则,可以参考一下外观模式。
  3. strategyimpl 这个就不解释了,懂得都懂。

总之,不要把策略模式狭隘的停留在计算上,算那几个钱根本配不上策略的这个名字,策略决定的很多类的生死,是一个很大的维度。一个策略就是一个系统。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值