设计模式:观察者模式 ——— 城管来了,摊主快跑
- 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????????????????????????????????????????????
???
????????