因爲博主最近一遍回顧基礎,一遍學新的知識點,因此發表的博客文章不會是按照順序的發表的,不過是分好類的。java
一塊兒學習,一塊兒進步。繼續沉澱,慢慢強大。但願這文章對您有幫助。如有寫的很差的地方,歡迎評論給建議哈!設計模式
初寫博客不久,我是楊展浩。這是個人第十一篇博客。加油!!!ide
今天來分享下Java基礎知識 - - > 觀察者設計模式!!!學習使用Java文檔提供的關於觀察者設計模式的一個接口 Observer 和一個類 Observable 。學習
首先簡單介紹下 觀察者設計模式 的基本原理:該設計模式分兩個角色,一個是觀察者,一個是被觀察者。測試
舉個例子:2個狗狗(逗逗、毛球) 和 他們的鏟屎官。當鏟屎官拿着狗糧而且命令逗逗和毛球坐好的時候,此時觀察者就是逗逗和毛球(死盯着鏟屎官拿着的那盤狗糧),所以被觀察對象就是狗糧。this
原理大概就這樣,下面上代碼實驗一波:spa
編寫一個被觀察者的類(這裏定義狗糧爲被觀察者):設計
package com.java8090.Watcher; import java.util.Observable; /** * @author zhanhao * @create 2019-09-10 14:11 */ public class DogFood extends Observable { private Integer amount; public DogFood (Integer amount){ System.out.println("狗糧初始化數量:" + amount); this.amount = amount; } public void setAmount(Integer amount){ if(amount > this.amount){ System.out.println("狗糧數量發生變化:" + amount); // 表示狗糧的量發生了變化 super.setChanged(); // 同步通知關注狗糧的觀察者們 super.notifyObservers(amount); } this.amount = amount; } }
編寫一個觀察者類(這裏定義狗狗爲觀察者):code
package com.java8090.Watcher; import java.util.Observable; import java.util.Observer; /** * @author zhanhao * @create 2019-09-10 14:14 */ public class DogFoodObserver implements Observer { private String name; public DogFoodObserver(String name){ this.name = name; } @Override public void update(Observable o, Object arg) { if(o instanceof DogFood){ DogFood dogFood = (DogFood) o; Integer dogFoodAmount = (Integer) arg; System.out.println("被關注的狗糧:" + dogFood + " 的量發生了變化:" + dogFoodAmount); } } }
測試類走起:server
package com.java8090.Watcher; /** * @author zhanhao * @create 2019-09-10 14:09 */ public class WatcherTest { public static void main(String[] args){ // 定義被觀察的對象 - -> 狗糧 DogFood dogFood = new DogFood(0); // 定義觀察者對象 - -> 關注狗糧的觀察者 DogFoodObserver dfo1 = new DogFoodObserver("關注狗糧的狗1號"); DogFoodObserver dfo2 = new DogFoodObserver("關注狗糧的狗2號"); DogFoodObserver dfo3 = new DogFoodObserver("關注狗糧的狗3號"); // 將被觀察者與觀察者作關聯 dogFood.addObserver(dfo1); dogFood.addObserver(dfo2); dogFood.addObserver(dfo3); // 當狗糧的量發生變化的時候,就會去通知全部觀察者 dogFood.setAmount(100); } }
執行結果:
總結下:對Java提供的一個接口 Observer 和 一個類 Observable 有個瞭解知道大概怎麼用就好了。
觀察者設計模式開發:被觀察者與觀察者之間須要進行關聯關係,當被觀察者發生變化時,會同步通知觀察者的。