最近闲的没事决定重温下常见的设计模式,顺便结合工作中的一些运用记录下这篇笔记,本文先来聊聊策略模式!
策略模式也是比较常见的一种设计模式了,简单来说,就是某一功能的实现具有不同的实现逻辑,但是最终完成的动作都是一致的,这时候想要实现这一功能就需要我们针对这一功能的不同实现定义不同的算法,比方说流程场景中常见的工单处理功能, 某员工需要提交一份报销工单,假如需要经过财务审批,领导签字,财务拨款,发起人确认是否收到这一系列流程,处理工单是一个功能,财务审批,领导签字,发起人确认某种意义上说都是在处理这一工单,相当于处理工单的不同实现,我们可以套用策略模式来 实现这份报销功能,具体代码实现如下:
1.定义处理工单的接口,如下图:
2.根据需要定义对应实现类,这里只定义了审批工单,处理工单和确认工单是否完成这三个实现类
3.定义处理工单接口,根据不同的处理类型自动匹配具体的实现类
上面就是策略模式的简单实现了,策略模式还可以用来替代if else的多层嵌套问题,因为其相对灵活,比方说上述流程还需新增一个工单回退的功能,只需新增一个处理回退逻辑的实现类再配置对应策略即可实现,所以策略模式还符合开闭原则;
由于其所有策略实现的逻辑存在于不同的实现类,大家各司其职,所以一定程度上保护了这些实现的算法不被直接公开,具有一定的安全性;
上面都是策略模式的优点,但其缺点也很明显,即新增一个策略就必须新建一个策略类,增加了代码的维护成本;另外,如果策略的调用者需要该策略提供的所有功能那么其必须知道所有的策略,所以一定程度上也增加了调用成本,所以我们在实际
应用时一定要根据自己的使用场景来正确选择策略模式的使用!