觀察者模式(observer)簡介:
定義乙個一對多的依賴關係,讓多個觀察者物件監聽某個主題物件,當主題物件的狀態發生改變時,主題物件則通知所有的觀察者物件,做出相應的反應,更新自己的狀態等。
觀察者模式結構圖:
subject抽象類以及concretesubject具體實現類:
//file: subject.h
#pragma once
#include "observer.h"
#include using namespace std;
class subject
;class concretesubject : public subject
;
//file: subject.cpp
#include "pch.h"
#include "subject.h"
//subject
subject::subject() {}
subject::~subject() {}
void subject::attach(observer *pobserver)
void subject::detach(observer *pobserver)
}}void subject::notify()
}//concretesubject
concretesubject::concretesubject() {}
concretesubject::~concretesubject() {}
int concretesubject::getstate()
void concretesubject::setstate(int i)
observer抽象類以及concreteobserver具體觀察者類:
//file: observer.h
#pragma once
#include using namespace std;
class subject;
class observer
;class concreteobserver : public observer
;
//file: observer.cpp
#include "pch.h"
#include "subject.h"
#include "observer.h"
#include using namespace std;
//observer
observer::observer() {}
observer::~observer() {}
//concreteoberver
concreteobserver::concreteobserver(string pname)
concreteobserver::~concreteobserver() {}
void concreteobserver::update(subject *ps)
客戶端**:
//file: observerpattern.cpp : this file contains the 'main' function. program execution begins and ends there.
#include "pch.h"
#include "subject.h"
int main()
subject抽象類以及concretesubject具體實現類:
public abstract class subject
public void attach(observer obj)
public void detach(observer obj)
public void notify()
}}public class concretesubject : subject
observer抽象類以及concreteobserver具體觀察者類:
public abstract class observer
public class concreteobserver : observer
public override void update(subject sub)
to state .", m_name, m_state);}}
客戶端**:
class program
}
抽象subject類以及委託方法原型以及concretesubject具體實現類:
public delegate void eventhander(subject sub);
public abstract class subject
public abstract void notify();
}public class concretesubject : subject
}
concreteobservera/b具體實現類:
public class concreteobservera
public string name
public concreteobservera(string name)
public void funca(subject sub)
to state .", name, state);
}public void featurea(subject sub)
to state .", name, state);
}}public class concreteobserverb
public string name
public concreteobserverb(string name)
public void funcb(subject sub)
to state .", name, state);
}public void featureb(subject sub)
to state .", name, state);}}
客戶端**:
class program
}
執行例項:
ref
書籍:設計模式與遊戲開發、大話設計模式
github:
設計模式(3)觀察者模式
1.觀察者模式 又可稱為發布 訂閱模式,顧名思義,就是定義乙個監聽者,監聽著被觀察的事件,一旦觀察到被監聽者某個狀態變化就會觸發相應的事件 2.應用場景 觀察者模式常被用於實現訂閱功能的場景,如微博訂閱,當我們訂閱了某個人的微博賬號,該使用者發布訊息,就會通知到我們 3.實現方案 1 針對觀察者和被...
python 設計模式 觀察者 觀察者設計模式
在觀察者設計模式這種模式中,物件被表示為等待事件觸發的觀察者。一旦發生指定的事件,觀察者就會關注該主體。當事件發生時,主體告訴觀察者它已經發生。以下uml圖表示觀察者模式 如何實現觀察者模式?現在讓我們來看看如何實現觀察者模式。參考以下實現 import threading import time ...
PHP設計模式(3)觀察者模式
觀察者模式為您提供了避免元件之間緊密耦合的另一種方法。該模式非常簡單 乙個物件通過新增乙個方法 該方法允許另乙個物件,即 觀察者 乙個簡單示例是系統中的使用者列表。下面的 顯示乙個使用者列表,新增使用者時,它將傳送出一條訊息。新增使用者時,通過傳送訊息的日誌觀察者可以觀察此列表。首先定義觀察者介面 ...