設計模式第2招第1式之觀察者模式

設計模式 Java 程序設計 程序員 IT導航 2017-05-21

設計模式第2招第1式之觀察者模式

設計模式

前言:

本系列文章共23篇,詳細介紹GOF (Gang Of Four)所定義的23種設計模式。共分為三大類對應標題中的3大招,每類中的每一種設計模式對應3大招中的某一式:

第1招-創建型(共5式):單例模式,工廠方法模式,抽象工廠模式,建造者模式,原型模式;

第2招-行為型(共11式):觀察者模式,策略模式,命令模式,狀態模式,解釋器模式,迭代器模式,中介者模式,訪問者模式,備忘錄模式,責任鏈模式,模板方法模式;

第3招-結構型(共7式):適配器模式,外觀模式,代理模式,裝飾者模式,組合模式,橋接模式,享元模式。

MVC (Model-View-Controller, 模型-視圖-控制器):是一種框架模式,包括Model-View-Controller三部分。其中Model負責數據模式為程序提供數據支持;View負責界面顯示與用戶交互;Controller將Model與View分離,處理View與Model的交互工作。MVC框架模式解耦了數據和數據的表示,提高的代碼的可複用、可維護特性。

內容摘要:

  1. 定義

  2. 應用場景

  3. Java代碼實例

  4. 優缺點

  5. 小結

一、定義

觀察者模式:表示一種一對多的依賴關係,多個對象同時監聽一個對象,當被監聽對象的狀態發生變化時,其可以動態的改變其本身。又稱發佈訂閱模式。

舉個例子:上學時,所有的“學生”都會注意“下課鈴”,當下課領一響,學生本就做飛鳥狀,該幹嘛幹嘛去了。這裡的“學生”就是觀察者,而“下課鈴”就是被觀察者,當“下課鈴”的狀態“響”發生變化時,“學生”會知道發生了變化進而做出動作。

設計模式第2招第1式之觀察者模式

觀察者模式UML圖

二、應用場景

  1. 天氣預報也算是觀察者模式;

  2. 報刊的訂閱;

  3. 當很多對象需要知道一個對象的狀態變化時;

三、Java代碼實例

觀察者模式涉及四個角色,分別是Subject Observer ConcreteSubject ConcreteObserver:

1.創建Observer和ConcreteObserver;

設計模式第2招第1式之觀察者模式

Observer

2.創建Observable和具體ConcreteObservable;



設計模式第2招第1式之觀察者模式

Observable

3.客戶端使用。



設計模式第2招第1式之觀察者模式

客戶端使用

四、優缺點

優點:

  1. 觀察者與被觀察者分離又不失聯繫,可以連接多個層次的架構。
  2. 解耦了觀察者和被觀察者。被觀察者只有一個抽象觀察者的列表;

  3. 建立了一種一對多的關係,被觀察者可以向所有註冊的觀察者發佈通知;

缺點:

  1. 如果其中的某個觀察者發生阻塞,則整個通知過程都要被阻;
  2. 避免被觀察者對象之間的循環依賴;

  3. 被觀察者通知所有的觀察者需要很大時間消耗;

  4. 觀察者無法知道被觀察者的變化細節;

五、小結

觀察者模式屬於行為型模式,主要是用於對象之間的通信。相對於創建型模式稍顯複雜,需要涉及多個角色。不過,觀察者模式是最常用且最有用的設計模式之一,很多一般無解的程序設計問題都可以使用觀察者模式來解決。向Android開發中的優秀框架RxJava/RxAndroid和EventBus等都使用了被優化過的觀察者模式。學會觀察者模式,讓你的程序更上一層樓,來試試。

設計模式第2招第1式之觀察者模式

美女程序員

相關推薦

推薦中...