策略模式

定义:定义算法族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户

目的:通过组合,面向接口,等等手段来应对日常开发中可能会出现频繁变化的情况。达到通过扩展和组合应对变化,优雅的保护稳定代码,对修改封闭;

定义算法族就是把某一类行为抽象成接口,在类中通过组合的方式把接口组装到类中,当业务出现变化的时候,就可以通过动态组合算法具体实现来应对变化的情形。

应用场景:以常写的mvc三层模式来举例子,一般的controller都需要有一些通用的方法,例如获取当前登录用户,获取request参数列表等等方法;这些是不变的部分,可以封装到一个BaseController的父类中,但是每个Controller又可能需要提供各种各样的不同的服务,查询不同的表。同时也会有两个不同的Controller里面需要查询相同的表;这时候就可以将这些变化的部分封装为算法族,也就是service,通过接口的方式进行组合。运行时按照需要注入相应的实现即可;

下面来看应对一种变化的情况,例如之前某个service的实现是查询的数据库中的数据,现在数据来源变成了通过接口服务获取的,那么我们只需要对这个service再做一个实现,重新组装到原来的Controller中去即可。原先稳定的代码不需要做修改,可以说我们是对代码做了扩展,然后做了重新组合,提高代码复用度;以优雅的方式实现对接口拔插;

以上 –jason 20190103