實現 c
使用情景
觀察者(observer)模式
又名發布-訂閱(publish/subscribe)模式
。gof 給觀察者模式如下定義:
定義物件間的一種一對多的依賴關係,當乙個物件的狀態發生改變時,所有依 賴於它的物件都得到通知並被自動更新。物件導向設計的乙個重要原則——單一職責原則。系統的每個物件應該 將重點放在問題域中的離散抽象上。因此理想的情況下,乙個物件只做一件事情。這樣在開發中也就帶來了諸多的好處: 提供了重用性和維護性,也是進行重構的良好的基礎。
因此幾乎所有的設計模式都是基於這個基本的設計原則來的。
其中:
- 抽象目標角色(subject): 目標角色知道它的觀察者,可以有任意多個觀察者觀察同乙個目標。並且提供註冊和刪除觀察者物件的介面。目標角色往往由抽象類或者介面來實現。
- 抽象觀察者角色(observer): 為那些在目標發生改變時需要獲得通知的物件定義乙個更新介面. 抽象觀察者角色主要由抽象類或者介面來實現。
- 具體目標角色(concrete subject): 將有關狀態存入各個 concrete observer 物件。當它的狀態發生改變時, 向它的各個觀察者發出通知。
- 具體觀察者角色(concrete observer): 儲存有關狀態,這些狀態應與目標的狀態保持一致。實現 observer 的更新介面以使自身狀態與目標的狀態保持一致。在本角色內也可以維護乙個指向 concrete subject 物件的引用。
// observer.hpp
#ifndef observer_hpp
#define observer_hpp
#include
#include "log.hpp"
#include "subject.hpp"
class subject;
class observer ;
std::string state;
virtual
void update(subject& subject);
};class observer1 : public observer
void update(subject& subject);
};class observer2 : public observer
void update(subject& subject);
};#endif /* observer_hpp */
// observer.cpp
#include
"observer.hpp"
void observer::update(subject& subject)
void observer1::update(subject& subject)
void observer2::update(subject& subject)
// subject.hpp
#ifndef subject_hpp
#define subject_hpp
#include
#include
#include "observer.hpp"
class observer;
class subject ;
class subject1 : public subject
};class subject2 : public subject
};#endif /* subject_hpp */
// subject.cpp
#include "subject.hpp"
subject::subject()
subject::~subject()
void subject::set_state(std::string state)
std::string subject::get_state()
void subject::attach(observer* observer_instance)
}void subject::detach(observer* observer_instance)
}void subject::notify()
}
// main.cpp
#include
"subject.hpp"
using std::cout;
using std::endl;
int main()
subject attach兩個互相引用的類的實現問題subject attach
subject attach
observer1 update
observer2 update
start both ob1 & ob2:
ob1: start ob2:start
subject detach
observer2 update
end ob2:
ob1: start ob2:end
╓ a.hpp ═#include "b.hpp" class b;
╙ a.cpp╓ b.hpp ═
#include "a.hpp" class a;
╙ b.cpp
python觀察者模式 python 觀察者模式
python 觀察者模式 前言e 寫的倉促就不截uml類圖了,書本chapter10,p313能看到圖 一旦觀察的主題有更新,就會通知到觀察者們,下面的例子是最簡單的乙個觀察者範例,假設這是一群投機分子密切關注 軍 火 倉庫的產品與數量變動 class inventory def init self...
觀察者模式
觀察者模式 observer 完美的將觀察者和被觀察的物件分離開。舉個例子,使用者介面可以作為乙個觀察者,業務資料是被觀察者,使用者介面觀察業務資料的變化,發現資料變化後,就顯示在介面上。物件導向設計的乙個原則是 系統中的每個類將重點放在某乙個功能上,而不是其他方面。乙個物件只做一件事情,並且將他做...
觀察者模式
觀察者模式定義了一種一對多的依賴關係,讓多個觀察者物件同時監聽某乙個主題物件。這個主題物件在狀態上發生變化時,會通知所有觀察者物件,讓他們能夠自動更新自己 任何乙個模式都是離不開角色的,這裡也會有幾種角色 抽象主題角色 把所有對觀察者物件的引用儲存在乙個集合中,每個抽象主題角色都可以有任意數量的觀察...