标签:
最近觅得一本好书《您的设计模式》,读完两章后就能断言,一定是一头极品屌丝写的,而且是专写给开发屌丝男的智慧枕边书,小女子就委屈一下,勉强看看,人笨,谁让他写得这么通俗易懂呢!为了加深理解,用自己的方式记录下来。
上第一章的策略模式之前讲个故事,解释一下类设计的背景:刘备要去江东娶老婆,临走时诸葛亮给伴郎赵云三个锦囊妙计,嘱咐按天机拆开解决棘手问题。这才有了后来的周瑜赔了夫人又折兵。三个妙计放在锦囊中,赵云从锦囊中取妙计获胜。先看类图:
1.三个妙计是具体的实现类,我们设计一个接口,再写三个实现类:
public interface IStrategy {
//每个锦囊妙计都是一个可执行的算法
public void operate();
}
public class BackDoor implements IStrategy {
public void operate() {
System.out.println("找乔国老帮忙,让吴国太给孙权施加压力");
}
}
public class GivenGreenLight implements IStrategy {
public void operate() {
System.out.println("求吴国太开个绿灯,放行!");
}
}
public class BlockEnemy implements IStrategy {
public void operate() {
System.out.println("孙夫人断后,挡住追兵");
}
}
2.三个妙计有了,装在锦囊里,需要设计一个入口类,方便赵云调用:
public class Context {
//构造函数,你要使用哪个妙计
private IStrategy straegy;
public Context(IStrategy strategy){
this.straegy = strategy;
}
//使用计谋,看我出招
public void operate(){
this.straegy.operate();
}
}
3.赵云出场,挨个拆开妙计,周瑜接招:
public class ZhaoYun {
public static void main(String[] args) {
Context context;
//刚刚到吴国的时候拆第一个
System.out.println("-----------刚刚到吴国的时候拆第一个-------------");
context = new Context(new BackDoor()); //拿到妙计
context.operate(); //拆开执行
System.out.println("\n\n\n\n\n\n\n\n");
//刘备乐不思蜀,拆第二个
System.out.println("-----------刘备乐不思蜀,拆第二个-------------");
context = new Context(new GivenGreenLight());
context.operate(); //执行第二个锦囊
System.out.println("\n\n\n\n\n\n\n\n");
//孙权的小兵追来,咋办?拆第三个
System.out.println("-----------孙权的小兵追来,咋办?拆第三个-------------");
context = new Context(new BlockEnemy());
context.operate(); //孙夫人退兵
System.out.println("\n\n\n\n\n\n\n\n");
/*
*问题来了:赵云实际不知道是那个策略呀,他只知道拆第一个锦囊,
*而不知道是BackDoor这个妙计,咋办? 似乎这个策略模式已经把计谋名称写出来了
** 错! BackDoor、 GivenGreenLight、 BlockEnemy只是一个代码, 你写成first、 second、third,没人会说你错!
*/
}
}
4.这就是策略模式,高内聚低耦合,而且扩展性好,要增加策略类,修改Context.java就行,所以应用广泛。
Java设计模式1——策略模式(Strategy Pattern)
标签:
原文地址:http://www.cnblogs.com/lucy-lily/p/4914815.html