java设计模式-策略模式
来源:互联网 发布:vb winhttp 编辑:程序博客网 时间:2024/06/05 20:01
解决问题:根据不同的参数输入,选择不同的执行代码
疑问:通过if else 也可以达到该目的,代码还简单
个人理解:if else逻辑在代码里不好管理,输入参数会直接影响到代码块的逻辑,耦合度高
下面以大家都熟悉的锦囊妙计为例说明该模式的用法
1.有很多妙计,比如三个(妙计相当于输入不同的参数,执行的不同的代码块)
2.多个妙计要装在一个盒子里(锦囊)
3.使用妙计的人只需要打开盒子,拿出妙计,照着做就OK
代码如下
/** * 这是所有妙计的借口,提供执行方法,用盒子调用 * @author ietown * */public interface I { public void operation();}
/** * 这是具体妙计,它实现了妙计接口 * @author ietown * */public class C1 implements I{ @Override public void operation() { System.out.println("第 1 策略实施"); }}
/** * 这是具体妙计,它实现了妙计接口 * @author ietown * */public class C2 implements I{ @Override public void operation() { System.out.println("第2策略实施"); }}
/** * 这是盒子,通过盒子执行妙计 * @author ietown * */public class Box { private I i; public Box(I i) { this.i = i; } public void opreating() { i.operation(); }}
/** * 这是具体使用者,他不管妙计的实现是什么,只需要传入他要执行的妙计,就可以得到妙计的执行结果 * 这里就是与if else控制不同的地方,如果是if else,那么当妙计的逻辑需要修改是,会直接修改使用者里的代码 * 另外,如果把 * Box box1 = new Box(new C1()); box1.opreating(); 替换成 C1 c1 = new C1(); c1.operation(); 似乎也是合理的,如果妙计逻辑需要修改,那么只要修改C1里的代码就可以了 但是,C1 c1 = new C1();是写在使用者代码里的,如果需要执行C2妙计,那么就需要把 C1 c1 = new C1(); 改成C2 c2 = new C2();这样还是需要修改使用者代码,造成耦合 所以,使用策略模式可以解决这种耦合,使用者代码里只需要定义Box,而至于使用那种策略 只是通过参数来控制就可以了 * @author ietown * */public class Main { public static void main(String[] args) { Box box = new Box(new C1()); // new C2(), new C3(), ..., new Cn() box.opreating(); }}
0 0
- Java设计模式 -- 策略模式
- java设计模式-----策略模式
- java 设计模式-策略模式
- java设计模式--策略模式
- java设计模式-策略模式
- java设计模式-策略模式
- java设计模式--策略模式
- java设计模式---策略模式
- java设计模式---策略模式
- java设计模式---策略模式
- 【Java设计模式】策略模式
- java设计模式--策略模式
- Java设计模式----策略模式
- Java设计模式------------策略模式
- Java设计模式 - 策略模式
- java设计模式---策略模式
- java设计模式-策略模式
- java设计模式----策略模式
- 点击文字链接提交Form表单
- Activiti流程变量的设置与获取(五)
- UIScrollView
- unity日本漫画风冷兵器动作RPG游戏《武士2复仇》源码
- 安装MongoDB遇到问题
- java设计模式-策略模式
- 案例:看OA如何攻克政府公文管理“多、细、繁、急”4大痛楚
- Box2d新系列 第八章 连接器(Joints)
- 关于常见的变量修饰符: const, static, extern, register, auto 的详细解释,使用场合以及注意事项
- 第4章 对象
- qml构建一个渐变色的窗口
- HBase之表的设计原则
- hdu 2227Find the nondecreasing subsequences(树状数组+dp+离散化)
- NOIP2015模拟1