设计模式

设计模式之禅笔记-策略模式

2020-12-20  本文已影响0人  凉快先生

赵云跟着刘备去江东,诸葛亮给了赵云三个锦囊。

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即可。

上一篇 下一篇

猜你喜欢

热点阅读