? ? ? ? ?写在前面的话:
?
? ? ? ? ? ? ? ? ? ? ? ?离毕业己经三个多月了,从实习到现在来公司己经快一年了,之前学习的好多东西正因为没有在现在的项目中体现,怕自己会忘记所有找了些资料重新冲一下电。记得老师曾经说过,把自己学习的知识,写在博客里,这样方便他人借鉴的同时,自己以后再想回过头来看也方便,故从现在开始每学习一个知识点,就记录一篇文章,些设计模式出自己CBF4LIFE的《我们的设计模式》大体上与之一至。在知识的海洋里我永远只是一只无法游到彼岸的菜鸟。
? ? ? ? ? ? ? ? ? ? ??策略模式【Strategy Pattern】
? 接口IStrategy只提供一个可执行的方法:
class="java" name="code">package com.dsl.strategy; /** *一个策略的接口,提供一个妙计的使用方法,讲述的是三国的故事 * @author * */ public interface IStrategy { public void operate();//使用妙计的方法 }
?下面是三个实现类:
package com.dsl.strategy; public class Backdoor implements IStrategy { //这是一个走后门的方法 @Override public void operate() { System.out.println("找乔国老帮忙,让吴国太给孙权施加压力"); } }
?
package com.dsl.strategy; public class GivenGreenLight implements IStrategy { @Override /** * 求吴国太开个绿灯 */ public void operate() { System.out.println("求吴国太开个绿灯,放走..."); } }
package com.dsl.strategy; public class BlockEnemy implements IStrategy{ @Override //阻挡追兵的方法 public void operate() { System.out.println("吴夫人出马,你们这些追兵还不走?"); } }
??一个锦囊类用来装妙计呵呵:
package com.dsl.strategy; /** * 一个装妙计的锦囊 * @author DengShenglong * */ public class Context { private IStrategy strategy;//里面必须有妙计撒.. //构造方法主其new的时候就初始化妙计 public Context(IStrategy strategy){ this.strategy=strategy; } //提供一个使用妙计的方法 public void operate(){ strategy.operate(); } }
?
package com.dsl.strategy; public class ZhaoYun { private static Context context;//他身上是有锦囊的 /** * 赵云来使用锦囊了 * @param args */ public static void main(String[] args) { System.out.println("-----------先去吴国的时候-----------"); context=new Context(new Backdoor());//这里就要使用第一个锦囊了 context.operate(); System.out.println("\n\n"); System.out.println("---------要把吴夫人搞到手嘛------------"); context=new Context(new GivenGreenLight());//要搞到美女必须要开绿灯啊! context.operate(); System.out.println("\n\n"); System.out.println("---------最后要把夫人接到蜀去了---------"); context=new Context(new BlockEnemy());//就要把追兵给赶走 context.operate(); } //策略模式的好处就是:体现了高内聚低耦合的特性 }
?