設計模式 3 觀察者模式

2022-09-17 09:51:09 字數 3318 閱讀 6297

觀察者模式(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)觀察者模式

觀察者模式為您提供了避免元件之間緊密耦合的另一種方法。該模式非常簡單 乙個物件通過新增乙個方法 該方法允許另乙個物件,即 觀察者 乙個簡單示例是系統中的使用者列表。下面的 顯示乙個使用者列表,新增使用者時,它將傳送出一條訊息。新增使用者時,通過傳送訊息的日誌觀察者可以觀察此列表。首先定義觀察者介面 ...