设计模式之策略模式

来源:互联网 发布:知乎 空手套黄文 编辑:程序博客网 时间: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
原创粉丝点击