設計模式–03.觀察者模式
- 2020 年 2 月 17 日
- 筆記
觀察者模式
觀察者模式是一個消息的派發的模式,是把被觀察者的狀態能夠及時的通知給觀察者。
比如一個超市的打折了,需要把消息通知給每一個超市的顧客,這樣就可以把超市作為一個被觀察者,而顧客是觀察者。
實現邏輯
觀察者模式實現的類圖如下:

實現步驟:
- 定義一個Observer介面,約束觀察者(顧客)需要實現的方法:
public interface Observer { void reciveMessage(double price); } public class CusmtomerObserver1 implements Observer { @Override public void reciveMessage(double price) { System.out.println("CusmtomerObserver1 收到了價格消息:" + price); } } public class CusmtomerObserver2 implements Observer { @Override public void reciveMessage(double price) { System.out.println("CusmtomerObserver2 收到了價格消息:" + price); } }
- 實現被觀察對象的方法
public class MarketSubject { private double price; public double getPrice() { return price; } public void setPrice(double price) { this.price = price; notifyObserver(price); } private ArrayList<Observer> observerList=new ArrayList<>(); public void addObserver(Observer observer){ observerList.add(observer); } public void removeObserver(Observer observer){ observerList.remove(observer); } public void notifyObserver(double price){ for (Observer ob : observerList) { ob.reciveMessage(price); } } }
- 實現方法的註冊和通知
public class ObserverMain { public static void main(String[] args) { MarketSubject marketSubject=new MarketSubject(); marketSubject.addObserver(new CusmtomerObserver1()); marketSubject.addObserver(new CusmtomerObserver2()); marketSubject.setPrice(100d); } }
運行結果:
CusmtomerObserver1 收到了價格消息:100.0 CusmtomerObserver2 收到了價格消息:100.0
(本文完)
作者:付威 部落格地址:http://blog.laofu.online 如有任何知識產權、版權問題或理論錯誤,還請指正。 本文是付威的網路部落格原創,自由轉載-非商用-非衍生-保持署名,請遵循:創意共享3.0許可證