常用的程序设计方法的基本思想(一篇文章搞懂程序设计模式中的策略模式)
常用的程序设计方法的基本思想(一篇文章搞懂程序设计模式中的策略模式)五、策略模式UML图解释:从代码中可以看出,每当添加一种新算法,都需要在doOperation方法里面增加一个case判断(不同算法实现之间逻辑耦合度高,而且麻烦),这样测试就需要对整个doOperation进行测试,包括未修改的算法,不利于单元测试(浪费时间)。三、使用场景四、问题代码未使用策略模式的代码示例
一、 相关概念
策略设计模式:它定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户。(选自:大话设计模式)
策略模式:是对算法的包装,是把使用算法的责任和算法本身分割开来,委派给不同的对象管理。(选自:博客园)
二、涉及角色
- 抽象策略(Strategy)角色:这是一个抽象角色,通常由一个接口或抽象类实现。此角色给出所有的具体策略类所需的接口。
- 环境(Context)角色:持有一个Strategy的引用。
- 具体策略(ConcreteStrategy)角色:包装了相关的算法或行为的一系列类。
三、使用场景
- 针对同一种问题的多种处理方式、仅仅是因为具体行为有差别时
- 需要安全的封装多种同一类型的操作时
- 出现同一抽象类有多个子类,而又需要使用if-else或者switch-case来选择具体子类时
四、问题代码
未使用策略模式的代码示例
解释:从代码中可以看出,每当添加一种新算法,都需要在doOperation方法里面增加一个case判断(不同算法实现之间逻辑耦合度高,而且麻烦),这样测试就需要对整个doOperation进行测试,包括未修改的算法,不利于单元测试(浪费时间)。
五、策略模式UML图
策略设计模式UML图
解释:我们将创建一个定义活动的 Strategy 接口和实现了 Strategy 接口的实体策略类(即各种算法)。Context 是一个使用了某种策略的类。这样就可以使用Context和策略对象来演示Context在它所配置或使用的策略改变时的行为变化。
六、代码实现
策略模块代码示例
七、总结
优点:①结构清晰明了、使用简单直观;②耦合度相对较低,扩展方便 ;③操作封装因为更为独立、数据更为安全。
缺点:子类增多
参考文献:《设计模式学习之策略模式》《菜鸟教程:策略模式》《java设计模式--策略模式》等