大話設計模式之觀察者模式
為了了解觀察者模式,我們首先看下報紙的訂閱是怎麼回事:
1、報社的業務是出版報紙。
2、向某家報社訂閱報紙,只要他們有新報紙出版,就會給你送來。只要你是他們的客戶,你就會一直收到報紙。
3、當你不想再看報紙的時候,取消訂閱,他們就不會再送新報紙來。
4、只要報社還在運營,就會一直有人向他們訂閱報紙或取消訂閱報紙。
乙個報社有多個訂閱者,報社有新報紙更新,會自動把新報紙推送給訂閱者。訂閱者可以訂閱和取消訂閱。
如果我們了解了報紙的訂閱是怎麼回事,其實就明白觀察者模式的內容,只是具體的稱呼有點不一樣。把出版社稱呼為「主題」(subject),訂閱者稱作「觀察者」(observer)。讓我們通過圖1-1,加深對觀察模式的認識。
(圖1-1)
觀察者模式定義了一系列物件之間的一對多關係。當乙個物件改變狀態,其他依賴者都會收到通知。主題和觀察者之間是一對多的關係。觀察者依賴於此主題,只要主題狀態一有變化,觀察者就會被通知。根據通知的內容,觀察者可能因此新值而更新。
實現觀察者的方式有很多種,但是以包含subject和observer介面的類設計最常見。讓我們通過具體的例子,揭開觀察者模式神秘的面紗。
(圖2-1)
在觀察者模式裡,主題是具有狀態的物件,並且可以控制這些狀態。也就是說,有「乙個」具有狀態的主題。另一方面,觀察者使用這些狀態,雖然這些狀態並不屬於他們。有許多的觀察者,依賴主題來告訴他們狀態何時改變了。這就產生了一對多的關係,「乙個」主題,對「多個」觀察者的關係。資料改變後,觀察者會收到主題的通知。
subject介面
/**
* 主題介面
* @author lizhizhou
* */
public inte***ce subject
observer介面
/**
* 觀察者介面
* @author lizhizhou
* */
public inte***ce observer
*****vo 資料物件
/**
* 報紙物件
* @author lizhizhou
* */
public class *****vo
public void settitle(string title)
public string getcontent()
public void setcontent(string content)
}
concretesubject主題實現類
/**
* 具體的觀察者
* @author lizhizhou
* */
public class concretesubject implements subject
@override
public void removeobserver(observer observer)
} @override
public void notifyobserver() }
/*** 資料更新
*/public void change*****()
}
concreteobserver具體觀察者
/**
* 具體的觀察者
* @author lizhizhou
* */
public class concreteobserver implements observer
@override
public void update(*****vo *****vo)
}}
subjecttest測試**
public class subjecttest
}
小貓已收到更新資訊:
標題;內容
-----------------------------------
小狗已收到更新資訊:
標題;內容
-----------------------------------
小雞已收到更新資訊:
標題;內容
-----------------------------------
觀察者模式是jdk中使用最多的設計模式之一,在觀察中模式中我們使用了松耦合設計和面向介面程式設計原則。觀察者模式讓主題和觀察者之間變的松耦合。根據面向介面程式設計原則,主題只需要知道觀察者實現的是什麼介面,不需要了解具體實現細節,只要某乙個物件實現了觀察者介面,我們就可以動態的增加和刪除觀察者;而且如果增加了不同型別的觀察者,我們也不需要更改主題中的**。
如果我們在其它地方需要使用觀察者或主題,可以輕易的復用,改變主題的一方或者另一方,並不會相互影響。因為兩者是松耦合的,只要主題和觀察者遵守介面規範,我們就可以自由的改變具體的實現類。
大話設計模式之觀察者模式
本節主要內容 1 觀察者模式意圖 2 觀察者模式uml圖描述 3 舉例說明 一 觀察者模式意圖 定義了一種一對多得依賴關係,讓多個觀察者物件同時監聽某乙個主題物件。這個主題物件在狀態發生變化時,會通知所有觀察者物件,使它們能夠自動更新自己。define a one to many dependenc...
大話設計模式之觀察者模式
觀察者模式 定義了一種一對多的依賴關係,讓多個觀察者物件同時監聽某乙個主題物件。這個主題物件在狀態上發生變化時,會通知所有觀察者物件,使它們能夠自動更新自己。觀察者模式所涉及的角色有 抽象主題 subject 角色 public abstract class subject 避免同乙個觀察者註冊多次...
大話設計模式觀察者模式c 實現
其他二十三種設計模式 include include using namespace std 觀察者模式 抽象觀察者類 class abstractobserver 抽象通知者類 class abstractsubject 具體通知者類 class concretesubject public ab...