觀察者模式主要定義物件之間的一種一對多的依賴關係,當乙個物件(被觀察者)的狀態發生改變時,所有依賴他的物件(觀察者)都得到通知並進行相應的操作;這裡reader(派生自obsever)從media(派生自subject)訂閱新聞,當有新聞產生時media就會呼叫notify通知(呼叫對應觀察者的update方法)所有訂閱該新聞的reader都拿到新聞;
///< 定義
#ifndef _subject_h
#define _subject_h
#include
"ulist.h"
#include
"observer.h"
struct subject_vmt;
struct subject
;struct subject_vmt
;extern
void
subject_init
(struct subject* pthis)
;#endif
// _subject_h
///< 實現
#include
#include
#include
"subject.h"
#include
"observer.h"
#include
"ulist.h"
void
attach_observer_virtual
(struct subject* pthis,
struct observer* pobs)
void
detach_observer_virtual
(struct subject* pthis,
struct observer* pobs)}}
void
notify_observers_virtual
(struct subject* pthis)
}void
attach_observer_subject
(struct subject* pthis,
struct observer* pobs)
void
detach_observer_subject
(struct subject* pthis,
struct observer* pobs)
void
notify_observers_subject
(struct subject* pthis)
void
subject_init
(struct subject* pthis)
;init_list_head
(&pthis->list_obs)
; pthis->vptr =
&svmt;
pthis->attach_observer = attach_observer_subject;
pthis->detach_observer = detach_observer_subject;
pthis->notify_observers = notify_observers_subject;
}struct subject*
construct_subject
(void
)void
destruct_subject
(struct subject* pthis)
///< 定義
#include
"ulist.h"
///< inte***ce class
struct subject;
struct observer_vmt;
struct observer
;struct observer_vmt
;extern
void
observer_init
(struct observer* pthis)
;#endif
// _observer_h
///< 實現
#include
#include
#include
"observer.h"
#include
"subject.h"
#include
"ulist.h"
void
update_observer
(struct observer* pthis,
struct subject* psub)
void
observer_init
(struct observer* pthis)
;init_list_head
(&pthis->node)
; pthis->vptr =
&ovmt;
pthis->update = update_observer;
}
///< 定義
#ifndef _media_h
#define _media_h
#include
"subject.h"
struct media
;extern
struct media*
construct_media
(void);
extern
void
destruct_media
(struct media* pthis)
;#endif
// _media_h
///< 實現
#include
#include
#include
#include
"observer.h"
#include
"subject.h"
#include
"media.h"
static
void
set_news
(struct media* pthis,
char
* news)
static
char
*get_news
(struct media* pthis)
void
media_init
(struct media* pthis)
struct media*
construct_media
(void
)void
destruct_media
(struct media* pthis)
///< 定義
#ifndef _reader_h
#define _reader_h
#include
"observer.h"
#include
"subject.h"
struct reader
;extern
struct reader*
construct_reader
(char
* name)
;extern
void
destruct_reader
(struct reader* pthis)
;#endif
// _reader_h
///< 實現
#include
#include
#include
#include
"ulist.h"
#include
"subject.h"
#include
"observer.h"
#include
"media.h"
#include
"reader.h"
static
void
reader_update_virtual
(struct observer* pthis,
struct subject* psub)
void
reader_init
(struct reader* pthis,
char
* pname)
;observer_init
(&pthis->super)
; pthis->super.vptr =
&rvmt;
pthis->update = reader_update_virtual;
strncpy
(pthis->name, pname,10)
;}struct reader*
construct_reader
(char
* name)
void
destruct_reader
(struct reader* pthis)
#include
#include
"subject.h"
#include
"observer.h"
#include
"media.h"
#include
"reader.h"
intmain()
設計模式之觀察者模式
首先說了乙個自己的小例子吧,前兩天我的乙個朋友來找我玩,因為路途比較遠,我需要知道他的位置,然後安排好時間去接他,那麼在這個例子中,我就是乙個觀察者,需要時時刻刻觀察他的位置,我的朋友就是乙個被觀察者。那麼需要知道我朋友的位置,就有兩種方式,第一,我自己打 問,第二,我的朋友告訴我,下面我們來看看這...
設計模式之觀察者模式
一 作用 讓多個觀察者監視某一物件的變化,如果物件變化,則通知所有觀察者。二 例子 抽象主題類 public abstract class subject 移除觀察者 public void detach observer observer 向觀察者 們 發出通知 public void notif...
設計模式之觀察者模式
觀察者模式的定義是 定義物件間的一種一對多的依賴關係。當乙個物件的狀態發生變化時,所有依賴它的物件都會得到通知並自動更新 報社跟讀者的例子 我們用報社和讀者之間的關係來模擬觀察者模式。包含以下主體 報社 news office 讀者介面 reader 具體讀者 reader 二逼青年 reader ...