zoukankan      html  css  js  c++  java
  • Java设计模式1——策略模式(Strategy Pattern)

      最近觅得一本好书《您的设计模式》,读完两章后就能断言,一定是一头极品屌丝写的,而且是专写给开发屌丝男的智慧枕边书,小女子就委屈一下,勉强看看,人笨,谁让他写得这么通俗易懂呢!为了加深理解,用自己的方式记录下来。

      上第一章的策略模式之前讲个故事,解释一下类设计的背景:刘备要去江东娶老婆,临走时诸葛亮给伴郎赵云三个锦囊妙计,嘱咐按天机拆开解决棘手问题。这才有了后来的周瑜赔了夫人又折兵。三个妙计放在锦囊中,赵云从锦囊中取妙计获胜。先看类图:

    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(" ");
        //刘备乐不思蜀,拆第二个
        System.out.println("-----------刘备乐不思蜀,拆第二个-------------");
        context = new Context(new GivenGreenLight());
        context.operate(); //执行第二个锦囊
        System.out.println(" ");
        //孙权的小兵追来,咋办?拆第三个
        System.out.println("-----------孙权的小兵追来,咋办?拆第三个-------------");
        context = new Context(new BlockEnemy());
        context.operate(); //孙夫人退兵
        System.out.println(" ");
        /*
        *问题来了:赵云实际不知道是那个策略呀,他只知道拆第一个锦囊,
        *而不知道是BackDoor这个妙计,咋办? 似乎这个策略模式已经把计谋名称写出来了
        ** 错! BackDoor、 GivenGreenLight、 BlockEnemy只是一个代码, 你写成first、 second、third,没人会说你错!    
        */
      }
    }

    4.这就是策略模式,高内聚低耦合,而且扩展性好,要增加策略类,修改Context.java就行,所以应用广泛。

  • 相关阅读:
    02Spring注解开发
    01Spring配置文件
    网络编程
    CHIL-SQL-IN 操作符
    CHIL-SQL-通配符
    CHIL-SQL-LIKE 操作符
    CHIL-SQL-TOP 子句
    CHIL-SQL-DELETE 语句
    CHIL-SQL-UPDATE 语句
    CHIL-SQL-INSERT INTO 语句
  • 原文地址:https://www.cnblogs.com/lucy-lily/p/4914815.html
Copyright © 2011-2022 走看看