设计模式之策略模式
来源:互联网 发布:知乎 空手套黄文 编辑:程序博客网 时间:2024/06/10 16:29
描述:三国时期,孙权为了限制刘备,企图以招亲之名来软禁刘备,诸葛亮在刘备临走时叫赵云务必在情况危急之时打开锦囊,锦囊可以化解危急,这里具体锦囊是什么东西就不展开叙述了,我们可以当成是具体的策略(目的是救刘备)。有了锦囊还不够,必须还需要一个携带锦囊的人,那就是赵云,也是锦囊的执行者。策略和命令似乎看上去差不多,不过最大的区别是策略是同一个方法的不同算法,算法之间可以相互替换;而命令模式需要Receiver,Invoker,并且具体的Command不能相互替换。
UML类图:
测试代码如下:
1、策略接口
package com.java.strategy;public interface Strategy {public void operate();}
2、策略接口实现类(以三个锦囊为例)
package com.java.strategy;public class FirstStrategy implements Strategy {@Overridepublic void operate() {System.out.println("找乔国老开后门...");}}
package com.java.strategy;public class SecondStrategy implements Strategy {@Overridepublic void operate() {System.out.println("吴国太开绿灯...");}}
package com.java.strategy;public class ThirdStrategy implements Strategy {@Overridepublic void operate() {System.out.println("逃跑的时候,找孙夫人断后...");}}
3、角色(也称为携带锦囊的人),也是执行者
package com.java.strategy;public class Context {private Strategy strategy;public Context(Strategy strategy) {this.strategy = strategy;}public void operate(){System.out.println("赵云准备执行锦囊...");strategy.operate();System.out.println("赵云执行锦囊结束...");}}
4、测试类
package com.java.strategy;public class StrategyTest {public static void main(String[] args) {//赵云执行第一个锦囊FirstStrategy first = new FirstStrategy();Context firstContext = new Context(first);firstContext.operate();//赵云执行第二个锦囊SecondStrategy second = new SecondStrategy();Context secondContext = new Context(second);secondContext.operate();//赵云执行第三个锦囊ThirdStrategy third = new ThirdStrategy();Context thirdContext = new Context(third);thirdContext.operate();}}
5、测试结果
赵云准备执行锦囊...找乔国老开后门...赵云执行锦囊结束...赵云准备执行锦囊...吴国太开绿灯...赵云执行锦囊结束...赵云准备执行锦囊...逃跑的时候,找孙夫人断后...赵云执行锦囊结束...
0 0
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- Oracle 11g 导出数据报 “ORA-01455: 转换列溢出整数数据类型”的问题
- 图解Git
- 读properties文件时,值中有空格,可能会引起bug
- 深入理解iOS开发中的BitCode功能
- 随意组合
- 设计模式之策略模式
- javaScript调试(debugger;)
- Storm集成Kafka
- HTML5 拖拽
- SpringMVC
- MFC——基本概念的通俗理解1
- mediacodec mp4v2应用
- iOS性能优化:Instruments使用实战
- Rxjava与Rxandroid结合实现网络请求