设计模式:观察者模式 ——— 城管来了,摊主快跑

  • 2019 年 10 月 3 日
  • 笔记

??

???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????…….

?????????????????????????????????????????????????????????????????????????????

?????

???????????????????????

??

????????????????????????????????????????????????????

??????-?????????????????????????????????????????????

????


?????????????????

  • Subject ??????????????????????????????????????????????????????????????????????????????????

  • Observer ???????????????????????????????????

  • ConcreteSubject ???????????????????????????????????

  • ConcreteObserver ??????????????????????????????????????

????

????????????????????????????????????????????????????????????????????OK?????????????????

??????

public abstract class Subject {      //?????????      private List<Observer> obs = new ArrayList<>();        //???????      public void addObserver(Observer o) {          this.obs.add(o);      }        //???????      public void delObserver(Observer o) {          this.obs.remove(o);      }        //???????      public void notifyObservers() {          for (Observer o : this.obs) {              o.update();          }      }  }

??????

????????????????Police????

public class Police extends Subject {      public void chase(){          System.out.println("???????????");          // ???????          notifyObservers();      }  }

?????

public interface Observer {      /**       * ????       * @param message       */      void update(String message);  }

?????

public class Vendor implements Observer {      private String name;      private String message;        public Vendor(String name) {          this.name = name;      }        @Override      public void update(String message) {          System.out.println(name + " ??? " + message);      }  }

???

?????????????

public class Client {        public static void main(String[] args) {          // ??--????          Police police = new Police();            // ????--???          Observer barbecueVendor = new Vendor("????");            // ?????--???          Observer cakeVendor = new Vendor("?????");            System.out.println("=======???????=======");          police.addObserver(barbecueVendor);          police.addObserver(cakeVendor);          police.chase();            System.out.println("=======???????=======");          police.delObserver(cakeVendor);          police.chase();      }  }

?????????????????????????????????

=======???????=======  ???????????  ???? ??? ??????????  ????? ??? ??????????  =======???????=======  ???????????  ???? ??? ??????????

??????????????????????????????????????????????????

??

??

1?????????????????????????????????????????Java?????????????????????????????

2???????????????????????????????????????????????

??

1???????????????????????????????????????????????

2??Java????????????????????????????????????????????

???

????????