首页 > 代码库 > 设计模式 之 策略模式
设计模式 之 策略模式
策略模式的定义是:定义一组算法,将每个算法都封装起来,并且在他们互相之间都可以切换。
下面是一个策略模式的通用源码,非常简单
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:模仿客户端角色
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 = http://www.mamicode.com/"";>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)); } }
策略角色实际上特别简单,你可以简单的认为就是把,所有的策略封装到一个类里面,然后当你使用的时间直接把 策略拿出来传到带有构造函数的封装角色里面即可,这也是封装角色的缺点,策略都暴漏出来了。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。