策略模式实际还是比较简单的,我们在日常开发过程中,有意无意的已经使用到了。
何为策略模式:
我的理解:简单点儿,就是同一种行为有多种实现,具体采用哪一种是动态决定的。举例: 支付行为,实现了支付宝支付,微信支付,信用卡支付,具体使用哪一种,是有用户自己动态决定。
项目中的一段代码贴出来,在之前的“项目中的工厂模式使用”那篇文章已经贴过。
public
背景是: 用户client 端发送指令给服务端,服务端接受指令,执行对应的动作。
有一个command 接口,接口中定义了2个方法,execute和 setParamters。
两个指令实现类, GetUserCommand 实现 对 “getUser" 的指令。AddUserCommand 实现 对“addUser“的指令。
public
CommandHandle 负责具体执行动作,它对到底执行哪个是不知道的,实际也不需要知道,上层给它什么Command对象,就执行哪一个。这里省略掉了 command 对象的创建过程,实际是使用了工厂方法模式创建的, 可以参考
https://zhuanlan.zhihu.com/p/161378823zhuanlan.zhihu.com策略模式特点:
1。行为对象接口 (Command)
2。行为接口具体实现类 (AddUserCommand, GetUserCommand)
3。 执行类 (CommandHandle),入参为行为对象
优势:
解耦,面向接口编程,职责划分明确,底层的扩展和变动不影响上层的代码结构。
扩展性, 对于一类行为,只需重新创建新的实现类作扩展, 符合开闭原则思想。
实例化行为接口具体实现类的时候(即 create AddUserCommand,GetUserCommand... ),一般都会用到工厂方法模式,所以这两种模式是密不可分的。