? ? ? ? ?写在前面的话:
?
? ? ? ? ? ? ? ? ? ? ? ?离毕业己经三个多月了,从实习到现在来公司己经快一年了,之前学习的好多东西正因为没有在现在的项目中体现,怕自己会忘记所有找了些资料重新冲一下电。记得老师曾经说过,把自己学习的知识,写在博客里,这样方便他人借鉴的同时,自己以后再想回过头来看也方便,故从现在开始每学习一个知识点,就记录一篇文章,些设计模式出自己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();
}
//策略模式的好处就是:体现了高内聚低耦合的特性
}
?