observer觀察者模式
作用:觀察者模式定義了一種一對多的依賴關係,讓多個觀察者物件同時監聽某乙個主題物件,這個主題物件在狀態發生變化時,會通知所有觀察者物件,使它們能夠自動更新自己
uml圖:
subject類,可翻譯為主題或抽象通知者,一般用乙個抽象類或者乙個藉口實現。它把所有對觀察者物件的引用儲存在乙個聚集裡,每個主題都可以有任何數量的觀察者。抽象主題提供乙個藉口,可以增加和刪除觀察者物件。
observer類,抽象觀察者,為所有的具體觀察者定義乙個藉口,在得到主題的通知時更新自己。這個藉口叫做更新介面。抽象觀察者一般用乙個抽象類或者乙個介面實現。更新介面通常包含乙個update()方法。
concretesubject類,叫做具體主題或具體通知者,將有關狀態存入具體通知者物件;在具體主題的內部狀態改變時,給所有等級過的觀察者發出通知。通常用乙個具體子類實現。
concreteobserver類,具體觀察者,實現抽象觀察者角色所要求的更新介面,以便使本身的狀態與主題的狀態相協調。具體觀察者角色可以儲存乙個指向乙個具體主題物件的引用。
特點:將乙個系統分割成一系列相互協作的類有乙個很不好的***,那就是需要維護相關物件間的一致性。我們不希望為了維持一致性而使各類緊密耦合,這樣會給維護、擴充套件和重用都帶來不便。
何時使用:
當乙個物件的改變需要同時改變其他物件的時候,而且它不知道具體有多少物件有待改變時,應該考慮使用觀察者模式。
觀察者模式所做的工作其實就是在解除耦合。讓耦合的雙方都依賴於抽象,而不是依賴於具體。從而使得各自的變化都不會影響另一邊的變化。
**如下:
observer.h
1observer.cpp#ifndef _observer_h_
2#define _observer_h_
34 #include
5 #include 6
using
namespace
std;78
class
subject;910
class
observer11;
1920
class concreteobservera : public
observer21;
3031
class concreteobserverb : public
observer32;
4142
class
subject43;
5758
class concretesubjecta : public
subject59;
6667
class concretesubjectb : public
subject68;
7576
#endif
1 #include "main.cppobserver.h
"2 #include 3 #include 4
5using
namespace
std;67
observer::observer()8{}
910 observer::~observer()
11{}
1213
concreteobservera::concreteobservera()
14{}
1516 concreteobservera::~concreteobservera()
17{}
1819
void concreteobservera::update(subject*psubject)
2024
25concreteobserverb::concreteobserverb()
26{}
2728 concreteobserverb::~concreteobserverb()
29{}
3031
void concreteobserverb::update(subject*psubject)
3236
37subject::subject()
38{}
3940 subject::~subject()
41{}
4243
void subject::attach(observer*pobserver)
4448
49void subject::detach(observer*pobserver)
5057 cout << "
detach an observer\n";
58}5960
void
subject::notify()
6167}68
69string
subject::getstate()
7073
74void subject::setstate(string
state)
7578
79concretesubjecta::concretesubjecta()
80{}
8182 concretesubjecta::~concretesubjecta()
83{}
8485
concretesubjectb::concretesubjectb()
86{}
8788 concretesubjectb::~concretesubjectb()
89 {}
#include "結果如下:observer.h
"#include
using
namespace
std;
intmain()
C 設計模式 Observer觀察者模式
observer觀察者模式 作用 觀察者模式定義了一種一對多的依賴關係,讓多個觀察者物件同時監聽某乙個主題物件,這個主題物件在狀態發生變化時,會通知所有觀察者物件,使它們能夠自動更新自己 uml圖 subject類,可翻譯為主題或抽象通知者,一般用乙個抽象類或者乙個藉口實現。它把所有對觀察者物件的引...
C 設計模式 觀察者模式 Observer
觀察者模式,定義物件間的一種一對多的依賴關係,當乙個物件的狀態發生改變時,所有依賴於它的物件都得到通知並被自動更新。以下任一情況下可以使用觀察者模式 來看下 isubject.h include include class iobserver using namespace std 抽象目標 cla...
C 設計模式 觀察者(Observer)
定義物件間的一種一對多的依賴關係,當目標發生變化時,它的所有觀察者得到通知並自動更新。主要組成 subject 目標 concretesubject 具體目標 observer 觀察者 concreteobserver 具體觀察者 using system using system.collecti...