<设计模式14>策略模式
来源:互联网 发布:flickr软件使用方法 编辑:程序博客网 时间:2024/06/03 14:05
策略模式通常是对算法的一些封装。
通常当一个问题有多个解决方案的时候,我们会通过if-else来对每个方法进行区分,通过传入的参数来确定具体使用某个方法。但是这样做的话耦合性太高,如果条件很多的时候,if-else就会很复杂。当我们需要进行增加或者减少的时候,就需要对代码的逻辑进行更改。这样就违反了开闭原则。
而策略模式,就能很好的解决这种问题,将各种方案分离开来。
策略模式中的各个角色:
Context:用来操作策略的上下文环境
IStragety:策略的抽象
FirstWayStragety、SecondWayStragety:具体的策略实现。
首先实现一个策略的接口
IStragety:
public interface IStrategy {void doSomeThings();}实现这个接口,也就是各个算法的实现:
FirstWayStragety:
public class FirstWayStrategy implements IStrategy{@Overridepublic void doSomeThings() {System.out.println("第一种处理方式");}}SecondWayStragety:
public class SecondWayStrategy implements IStrategy{@Overridepublic void doSomeThings() {System.out.println("第二种处理方式");}}
public class Context {private IStrategy strategy;public void set(IStrategy strategy){this.strategy = strategy;}public void doSomethings(){if(strategy != null){strategy.doSomeThings();}}}
使用测试:
public class StrategyTest {public static void main(String[] args) {<span style="color:#ff0000;">//不使用策略模式</span>getWay("First");<span style="color:#ff0000;">//使用策略模式</span>Context context = new Context();context.set(new FirstWayStrategy());context.doSomethings();}private static void getWay(String type) {if("First".equals(type)){FirstWayStrategy way = new FirstWayStrategy();way.doSomeThings();}else {SecondWayStrategy way = new SecondWayStrategy();way.doSomeThings();}}}这两种实现结果是一样的,但是虽然不使用策略模式的第一种方法也进行了一层封装,但是里面还是存在复制的if-else,而通过策略模式,通过不同策略的构建来实现了不同算法的替换,当我们新增一个算法的时候,不是去修改if-else的逻辑代码,而是重新实现一个抽象类,这样明显增加了系统的稳定性、扩展性,让业务逻辑更加直观。
0 0
- <设计模式14>策略模式
- 设计模式-策略模式
- 设计模式:策略模式
- 设计模式-策略模式
- 设计模式 - 策略模式
- 设计模式-策略模式
- 设计模式-----策略模式
- 设计模式 策略模式
- 设计模式-策略模式
- 设计模式-【策略模式】
- 设计模式-----策略模式
- 设计模式-策略模式
- 设计模式--策略模式
- 设计模式- 策略模式
- 设计模式- 策略模式
- 设计模式------策略模式
- 设计模式--策略模式
- 设计模式-策略模式
- 120. Triangle
- poj1065(dilworth定理+lis)
- 利用hibernate数据映射创建数据表(创建自己的jar包库)
- 不足之处
- 乒乓球问题
- <设计模式14>策略模式
- nodejs数据库操作
- Mysql学习笔记(二)
- 关于form表单在ajax中return false仍然提交的内容
- JAVA基础6.60——模板方法设计模式
- 斐波那契数列矩阵快速幂
- SPSS变量定义
- Educational Codeforces Round 15
- program files文件夹和program files(x86)文件夹