一、设计图
二、Demo代码
1. Strategy接口
package com.mc.core; /** * Created by LCF on 2016/1/25. * 功能:核心策略的具体实现类。 * 说明:Java中类不加任何修饰符是默认状态,此情况只允许在同一个包访问,之所以这么设计是为了减少暴露不必要变量的风险。 * 观点:个人认为对于类或者方法:能不暴露更多的就不暴露更多的。 */ interface Strategy { /** * 包含核心策略的公共接口 * @param a * @param b * @return */ int operate(int a, int b); }
说明:此接口包含抽象出来的核心的策略。
2. AddStrategy和SubStrategy
package com.mc.core; /** * Created by LCF on 2016/1/25. * 功能:加法策略的具体实现类。 * 说明:Java中类不加任何修饰符是默认状态,此情况只允许在同一个包访问,之所以这么设计是为了减少暴露不必要变量的风险。 * 观点:个人认为对于类或者方法:能不暴露更多的就不暴露更多的。 */ class AddStrategy implements Strategy { @Override public int operate(int a, int b) { return a+b; } }
package com.mc.core; /** * Created by LCF on 2016/1/25. * 功能:减法策略的具体实现类。 * 说明:Java中类不加任何修饰符是默认状态,此情况只允许在同一个包访问,之所以这么设计是为了减少暴露不必要变量的风险。 * 观点:个人认为对于类或者方法:能不暴露更多的就不暴露更多的。 */ class SubStrategy implements Strategy { @Override public int operate(int a, int b) { return a - b; } }
说明:上述2个类,都是核心策略接口的具体实现类。
3. Context类
package com.mc.core; /** * Created by LCF on 2016/1/25. * 上下文对象实现类,有承上启下的作用。 */ public class Context { /** * 限制用户调用无参构造方法 */ private Context(){} /** * 策略的公共接口类 */ private Strategy strategy; /** * 枚举类型限制选择。 */ public enum Choice{ ADD,SUB } /** * 构造方法为确定使用哪种策略 * @param choice 具体策略的映射 */ public Context(Choice choice){ if ("ADD".equals(choice.toString())) { strategy=new AddStrategy(); }else{ strategy=new SubStrategy(); } } /** * 本质为调用公共接口类的方法。 * @param a 运算所需第一个参数 * @param b 运算所需第二个参数 * @return */ public int operate(int a,int b){ return strategy.operate(a,b); } }
说明:此为承上启下的上下文对象类,1. 此类中要由构造函数确定具体调用那种实现类,2. 还要传入实现策略的具体数据。
项目开源在:http://git.oschina.net/codingox/DesignPattern-Strategy