国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

觀察者模式(C++)

這篇具有很好參考價值的文章主要介紹了觀察者模式(C++)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

定義

定義對象間的一種一對多(變化)的依賴關(guān)系,以便當一個對象(Subject)的狀態(tài)發(fā)生改變時,所有依賴于它的對象都得到通知并自動更新。
——《設計模式》GoF

使用場景

一個對象(目標對象)的狀態(tài)發(fā)生改變,所有的依賴對象(觀察者對象)都將得到通知,進行廣播通知。

結(jié)構(gòu)

觀察者模式(C++),設計模式,觀察者模式,c++

代碼示例

//Observer.h
/****************************************************/
#ifndef OBSERVER_H
#define OBSERVER_H
#include<iostream>
#include<list> 
using namespace std;
 
class Observer {
public:
	//構(gòu)造
	Observer(){ }
	//析構(gòu)
	virtual ~Observer(){ }
	//更新
	virtual void updata(){ }
};
 
class Server {
private:
	//觀察者鏈表
	list<Observer*> m_Observer;
 
protected:
	//服務器狀態(tài)
	string m_Status;
 
public:
	//構(gòu)造函數(shù)
	Server(){ }
	//析構(gòu)函數(shù)
	virtual ~Server(){ }
	//添加觀察者
	void Attach(Observer* observer) {
		this->m_Observer.push_back(observer);
	}
	//移除觀察者
	void Remove(Observer* observer) {
		this->m_Observer.remove(observer);
	}
	//設置服務器狀態(tài)
	virtual void SetStatus(string s){ }
	//獲取服務器狀態(tài)
	virtual string GetStatus() {
		return this->m_Status;
	}
	//通知觀察者
	void Notify() {
		for (list<Observer*>::iterator iter = this->m_Observer.begin();iter != m_Observer.end(); iter++) {
			(*iter)->updata();
		}
	}
};

//具體服務器
class Concrete_Server : public Server {
private:
	//用戶名稱
	string m_Name;
public:
	//構(gòu)造
	Concrete_Server(string name) {
		this->m_Name = name;
	}
	//析構(gòu)
	~Concrete_Server(){ }
	//設置服務器狀態(tài)
	virtual void SetStatus(string s) { 
		this->m_Status = "("+this->m_Name+")"+s;
	}
	//獲取服務器狀態(tài)
	virtual string GetStatus() {
		return this->m_Status;
	}
};
 
//具體觀察者
class Concrete_Observer : public Observer {
private:
	//觀察者名稱
	string m_Name;
	//需要觀察的服務器
	Server* m_Server;
public:
	//構(gòu)造
	Concrete_Observer(string name, Server* server) {
		this->m_Name = name;
		this->m_Server = server;
	}
	//析構(gòu)
	~Concrete_Observer(){ }
	//更新
	virtual void updata() {
		cout << this->m_Name << ": " << this->m_Server->GetStatus() << endl;
	}
};

#endif

//test.cpp
/****************************************************/
#include <iostream>
#include <string>
#include "Observer.h"
 
 
int main()
{
	Server* server1 = new Concrete_Server("服務器1");
 
	Observer* observer1 = new Concrete_Observer("觀察者1", server1);
	Observer* observer2 = new Concrete_Observer("觀察者2", server1);
	server1->Attach(observer1);
	server1->Attach(observer2);
	server1->SetStatus("2.1.0.001更新系統(tǒng)");
	server1->Notify();
 
	delete server1;
	server1 = NULL;
	delete observer1;
	observer1 = NULL;
	return 0;
}

運行結(jié)果:
觀察者模式(C++),設計模式,觀察者模式,c++文章來源地址http://www.zghlxwxcb.cn/news/detail-638443.html

要點總結(jié)

  • 使用面向?qū)ο蟮某橄?,Observer模式使得我們可以獨立地改變目標與觀察者,從而使二者之間的依賴關(guān)系達致松耦合。
  • 目標發(fā)送通知時,無需指定觀察者,通知(可以攜帶通知信息作為參數(shù))會自動傳播。
  • 觀察者自己決定是否需要訂閱通知,目標對象對此一無所知。
  • Observer模式是基于事件的UI框架中非常常用的設計模式,也是MVC模式的一個重要組成部分。

到了這里,關(guān)于觀察者模式(C++)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務器費用

相關(guān)文章

  • 設計模式(四) —— 觀察者模式/發(fā)布訂閱模式,c和c++示例代碼

    往期地址: 設計模式(一)——簡單工廠模式 設計模式(二)——策略模式 設計模式(三)——裝飾模式 本期主題: 使用c和c++代碼,講解觀察者模式、發(fā)布訂閱模式 發(fā)布-訂閱模式是一種行為設計模式,它允許多個對象通過事件的發(fā)布和訂閱來進行通信; 在這種模式中,

    2023年04月17日
    瀏覽(93)
  • 設計模式——觀察者模式

    設計模式——觀察者模式

    觀察者模式可以分為觀察者和被觀察者,觀察者通過注冊到一個被觀察者中,也可視為訂閱,當被觀察者的數(shù)據(jù)發(fā)生改變時,會通知到觀察者,觀察者可以據(jù)此做出反應。 可以類比訂閱報紙,報社就是被觀察者,訂閱者就是觀察者,訂閱者通過訂閱報紙與報社建立聯(lián)系,而報

    2024年02月15日
    瀏覽(17)
  • 【設計模式】觀察者模式

    【設計模式】觀察者模式

    觀察者模式(又被稱為發(fā)布-訂閱(Publish/Subscribe)模式,屬于行為型模式的一種,它定義了一種一對多的依賴關(guān)系,讓多個觀察者對象同時監(jiān)聽某一個主題對象。這個主題對象在狀態(tài)變化時,會通知所有的觀察者對象,使他們能夠自動更新自己。 Subject:抽象主題(被觀察者

    2024年02月13日
    瀏覽(20)
  • 設計模式---觀察者模式

    1,概念 ????????屬于行為模式的一種,定義了一種一對多的依賴關(guān)系,讓多個觀察者對象同時監(jiān)聽某一對象主題對象,這個主題對象在狀態(tài)變化時,會通知所有的觀察者對象,使他們能夠自動更新自己。 在觀察者模式中有如下角色: Subject:抽象主題(抽象被觀察者),

    2024年02月15日
    瀏覽(18)
  • 設計模式-觀察者模式

    觀察者模式是一種行為型設計模式,它定義了一種一對多的依賴關(guān)系,當一個對象的狀態(tài)發(fā)生改變時,其所有依賴者都會收到通知并自動更新。當對象間存在一對多關(guān)系時,則使用觀察者模式(Observer Pattern)。比如,當一個對象被修改時,則會自動通知依賴它的對象。觀察者

    2024年02月15日
    瀏覽(22)
  • 設計模式:觀察者模式

    定義 觀察者模式(Observer Pattern)是一種行為設計模式,允許一個對象(稱為“主題”或“可觀察對象”)維護一組依賴于它的對象(稱為“觀察者”),當主題的狀態(tài)發(fā)生變化時,會自動通知所有觀察者對象。 應用場景 觀察者模式適用于以下場景: 聯(lián)動反應 :當一個對象

    2024年04月08日
    瀏覽(24)
  • 設計模式之觀察者模式

    可以幫你的對象知悉現(xiàn)況,不會錯過該對象感興趣的事。對象甚至在運行時可決定是否要繼續(xù)被通知。 從報紙和雜志的訂閱說起: 報社的業(yè)務就是出版報紙 向某家報社訂閱報紙,只要他們有新報紙出版,就會給你送來。只要你是他們的訂戶,你就會一直收到新報紙。 當你不

    2024年01月24日
    瀏覽(23)
  • 設計模式——14. 觀察者模式

    設計模式——14. 觀察者模式

    觀察者模式(Observer Pattern)是一種行為型設計模式,用于定義對象之間的一對多依賴關(guān)系,使得當一個對象的狀態(tài)發(fā)生改變時,所有依賴于它的對象都能夠自動收到通知并更新自己的狀態(tài),以保持與被觀察對象的同步。觀察者模式也被稱為發(fā)布-訂閱模式。 觀察者模式包含以

    2024年02月07日
    瀏覽(19)
  • 設計模式(11)觀察者模式

    設計模式(11)觀察者模式

    一、概述: 1、定義:觀察者模式定義了一種一對多的依賴關(guān)系,讓多個觀察者對象同時監(jiān)聽某一個主題對象。這個主題對象在狀態(tài)發(fā)生變化時,會通知所有觀察者對象,使它們能夠自動更新自己。 2、結(jié)構(gòu)圖: 實現(xiàn) ?調(diào)用

    2024年02月11日
    瀏覽(30)
  • 重溫設計模式 --- 觀察者模式

    觀察者模式 是一種行為型設計模式,它允許對象之間建立一種一對多的關(guān)系,使得當一個對象狀態(tài)改變時,所有依賴它的對象都能夠自動得到通知并更新自己的狀態(tài)。該模式可以幫助我們實現(xiàn)松耦合的系統(tǒng),以便更好地應對變化和擴展。 在觀察者模式中,有兩個角色: 觀察

    2024年02月13日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包