策略模式的定义是:定义一组算法。将每一个算法都封装起来,而且在他们互相之间都能够切换。
以下是一个策略模式的通用源代码,很easy
1:抽象的策略较色
package strategy.common; public interface Strategy { //策略模式的运算法測 public void doSomething(); }
2:详细的策略脚色
package strategy.common; public class ConcreteStrategy implements Strategy{ @Override public void doSomething() { // TODO Auto-generated method stub } }
package strategy.common; public class ConcreteStrategy1 implements Strategy{ @Override public void doSomething() { // TODO Auto-generated method stub } }
3:封装角色
package strategy.common; public class Context { private Strategy strategy; public Context(Strategy strategy){ this.strategy=strategy; } public void doSomething(){ this.strategy.doSomething(); } }
4:模仿client角色
package strategy.common; public class Client { //声明一个详细的策略 public static void main(String[] args) { Strategy strategy = new ConcreteStrategy(); Context context = new Context(strategy); context.doSomething(); } }
策略角色使算法能够互相切换,降低推断条件而且扩展性良好
以下这个样例来自书本上的,这个枚举类型的策略角色我感觉用的非常完美,在这里和大家分享一下,自己也把他记录下来,留着自己以后能够使用
package strategy; public enum Caculator { //加法运算 ADD("+"){ public int exec(int a, int b){ return a+b; } }, SUB("-"){ public int exec(int a,int b){ return a-b; } }; // String value = ""; //定义成员值类型 private Caculator(String _value){ this.value = _value; } //获得枚举成员的值 public String getValue(){ return this.value; } //声明一个抽象函数 public abstract int exec(int a,int b); }
package strategy; import java.util.Arrays; public class Client { public static void main(String[] args) { int a = Integer.parseInt("11"); String symo = "-"; int b = Integer.parseInt("12"); System.out.println("输入的參数为 " + Arrays.toString(args)); System.out.println("执行结果为 : "+ a+symo+b+"=" +Caculator.ADD.exec(a, b)); } }
策略角色实际上特别简单。你能够简单的觉得就是把。全部的策略封装到一个类里面。然后当你使用的时间直接把 策略拿出来传到带有构造函数的封装角色里面就可以,这也是封装角色的缺点,策略都暴漏出来了。