设计模式之禅笔记-策略模式
赵云跟着刘备去江东,诸葛亮给了赵云三个锦囊。
1.抽象策略接口
public interface IStrategy {
// 每个锦囊妙计都是一个可执行的算法
public void operate();
}
2.实现策略接口,三个具体策略
找乔国老帮忙,使孙权不能杀刘备
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("孙夫人断后,挡住追兵" );
}
}
3.设计统一调用策略的路径(锦囊)
public class Context {
// 构造函数,你要使用那个妙计
private IStrategy straegy ;
public Context(IStrategy strategy){
this.straegy = strategy;
}
// 使用计谋了,看我出招了
public void operate(){
this.straegy .operate();
}
}
4.赵云调用锦囊使用具体策略
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" );
}
}
策略模式体现了高内聚低耦合的特性,可扩展性,ocp原则(开闭原则),策略可无限加,只需改变context即可。