第0章:简介
策略模式定义:定义一系列算法,把它们一个个封装起来,并且使它们可互相替换。本模式使得算法可独立于使用它的客户而变化
策略模式本质:分离算法,选择实现
参考:http://chjavach.iteye.com/blog/696977,研磨设计模式(书籍),大话设计模式(书籍)
模式图:
待补充
第1章:实践
(1)策略接口(Strategy.java)
package com.mcc.core.designPattern.behavior.strategy; /** * 策略接口 * * 策略模式的定义:定义一系列算法,把它们一个个封装起来,并且使它们可互相替换。本模式使得算法可独立于使用它的客户而变化 * 策略模式的本质:分离算法,选择实现 * * @author <a href="mailto:[email protected]">menergy</a> * DateTime: 14-3-16 下午7:03 */ public interface Strategy { public void someMethod(); } |
(2)策略A(StrategyImplA.java)
package com.mcc.core.designPattern.behavior.strategy; /** * 策略A * * @author <a href="mailto:[email protected]">menergy</a> * DateTime: 14-3-16 下午7:05 */ public class StrategyImplA implements Strategy { @Override public void someMethod() { System.out.println("执行策略A操作"); } } |
(3)策略B(StrategyImplB.java)
package com.mcc.core.designPattern.behavior.strategy; /** * 策略B * * @author <a href="mailto:[email protected]">menergy</a> * DateTime: 14-3-16 下午7:05 */ public class StrategyImplB implements Strategy { @Override public void someMethod() { System.out.println("执行策略B操作"); } } |
(4)策略C(StrategyImplC.java)
package com.mcc.core.designPattern.behavior.strategy; /** * 策略C * * @author <a href="mailto:[email protected]">menergy</a> * DateTime: 14-3-16 下午7:05 */ public class StrategyImplC implements Strategy { @Override public void someMethod() { System.out.println("执行策略C操作"); } } |
(5)上下文对象(Context.java)
package com.mcc.core.designPattern.behavior.strategy; /** * 上下文对象,通常持有具体的策略对象 * * @author <a href="mailto:[email protected]">menergy</a> * DateTime: 14-3-16 下午7:06 */ public class Context { //持有具体的策略对象 private Strategy strategy; /** * 构造器,传入具体的策略对象 * @param strategy */ public Context(Strategy strategy){ this.strategy = strategy; } /** * 上下文对外接口,可以有其它参数和其它操作 */ public void execute(){ //转调具体策略对象的方法 strategy.someMethod(); } } |
(6)客户端测试(Client.java)
package com.mcc.core.designPattern.behavior.strategy; /** * 客户端测试 * * @author <a href="mailto:[email protected]">menergy</a> * DateTime: 14-3-16 下午7:11 */ public class Client { public static void main(String args[]){ //创建策略对象 Strategy strategyA = new StrategyImplA(); Strategy strategyB = new StrategyImplB(); Strategy strategyC = new StrategyImplC(); //创建上下文并执行策略A Context contextA = new Context(strategyA); contextA.execute(); //创建上下文并执行策略B Context contextB = new Context(strategyB); contextB.execute(); //创建上下文并执行策略C Context contextC = new Context(strategyC); contextC.execute(); } } |