21行为型模式之观察者模式

概念

  Observer模式是行为模式之一,它的作用是当一个对象的状态发生变化时,能够自动通知其他关联对象,自动刷新对象状态。

  Observer模式提供给关联对象一种同步通信的手段,使某个对象与依赖它的其他对象之间保持状态同步。

角色和职责

Subject(被观察者)

被观察的对象。当需要被观察的状态发生变化时,需要通知队列中所有观察者对象。Subject需要维持(添加,删除,通知)一个观察者对象的队列列表。

ConcreteSubject

被观察者的具体实现。包含一些基本的属性状态及其他操作。

Observer(观察者)

接口或抽象类。当Subject的状态发生变化时,Observer对象将通过一个callback函数得到通知。

ConcreteObserver

观察者的具体实现。得到通知后将完成一些具体的业务逻辑处理。

典型应用

  - 侦听事件驱动程序设计中的外部事件

  - 侦听/监视某个对象的状态变化

  - 发布者/订阅者(publisher/subscriber)模型中,当一个外部事件(新的产品,消息的出现等等)被触发时,通知邮件列表中的订阅者

适用于:

         定义对象间一种一对多的依赖关系,使得每一个对象改变状态,则所有依赖于他们的对象都会得到通知。

案例

//定义了一种一对多的关系,让多个观察对象(公司员工)同时监听一个主题对象(秘书),主题对象状态发生变化时,会通知所有的观察者,使它们能够更新自己。

#include <iostream>
using namespace std;
#include "vector"
#include "string"

class Secretary;

//玩游戏的同事类(观察者)
class PlayserObserver
{
public:
	PlayserObserver(string name, Secretary *secretary)
	{
		m_name = name;
		m_secretary = secretary;
	}
	void update(string action)
	{
		cout << "观察者收到action:" << action << endl;
	}
private:
	string		m_name;
	Secretary	*m_secretary;
};

//秘书类(主题对象,通知者)
class Secretary
{
public:
	void addObserver(PlayserObserver *o)
	{
		v.push_back(o);
	}
	void Notify(string action)
	{
		for (vector<PlayserObserver *>::iterator it= v.begin(); it!=v.end(); it++ )
		{
			(*it)->update(action);
		}
	}
	void setAction(string action)
	{
		m_action = action;
		Notify(m_action);
	}
private:
	string m_action;
	vector<PlayserObserver *> v;
};

void main()
{
	//subject 被观察者
	Secretary *s1 = new Secretary;

	//具体的观察者 被通知对象
	PlayserObserver *po1 = new PlayserObserver("小张", s1);
	//PlayserObserver *po2 = new PlayserObserver("小李", s1);
	s1->addObserver(po1);
	//s1->addObserver(po2);
	s1->setAction("老板来了");
	s1->setAction("老板走了");
	cout<<"hello..."<<endl;
	system("pause");
	return ;
}

  

原文地址:https://www.cnblogs.com/gd-luojialin/p/10358048.html

时间: 2024-10-05 23:27:42

21行为型模式之观察者模式的相关文章

(19):(行为型模式) Observer 观察者模式

(19):(行为型模式) Observer 观察者模式,布布扣,bubuko.com

设计模式-行为型模式,观察者模式(13)

当对象间存在一对多关系时,则使用观察者模式(Observer Pattern).比如,当一个对象被修改时,则会自动通知它的依赖对象.观察者模式属于行为型模式. 有时,我们希望在一个对象的状态改变时更新另外一组对象. class Publisher: def __init__(self): self.observers = [] def add(self, observer): if observer not in self.observers: self.observers.append(obs

面向对象程序设计(OOP设计模式)-行为型模式之观察者模式的应用与实现

课程名称:程序设计方法学 实验5:OOP设计模式-行为型模式的应用与实现 时间:2015年12月02日三,第3.4节地点:理1 一.实验目的 加深对行为型设计模式的理解以及在开发中的实际应用能力. 二.实验内容 实验内容: 在工业自动化系统中,作为监控端,要求能够实时采集生产线上每一个测点的数据,并根据事先设定好的条件来发出告警.目前,系统可以支持的告警方式在形式上呈现多样化的趋势,主要包括屏幕显示告警.语音发声告警.电话拨号告警.电子邮件告警.手机短信告警以及其他可利用的告警方式等.在设置监控

行为型模式之观察者模式

概述 观察者模式是使用频率最高的设计模式之一,它用于建立一种对象与对象之间的依赖关系,一个对象发生改变时将自动通知其他对象,其他对象将相应作出反应.在观察者模式中,发生改变的对象称为观察目标,而被通知的对象称为观察者,一个观察目标可以对应多个观察者,而且这些观察者之间可以没有任何相互联系,可以根据需要增加和删除观察者,使得系统更易于扩展. 定义 观察者模式(Observer Pattern):定义对象之间的一种一对多依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象皆得到通知并被自动更新.

设计模式----行为型模式之观察者模式(Observer Pattern)

下面是阅读<Head First设计模式>的笔记. 观察者模式 定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新. JDK API内置机制 JDK1.0版本就已经包含了java.util.Observer和java.util.Observable,TODO. java.util.Observer是一个接口,所有使用内置机制实现观察者模式,都需要实现该接口.该接口只定义了一个方法 void update(Observable o, Object a

21 行为型模式-----状态模式

模式动机(State Pattern):软件系统中,每一个模块在不同的环境下可能发挥着不同的作用,表现为同一对象可能有多种不同的状态,而每种状态下可能有不同的行为.在UML图中,可以用状态图来表示.在程序设计中,我们引入一个抽象状态接口,其中封装了与当前环境状态相关的行为,然后定义具体的状态实现类,根据状态的不同实现不同的行为,并且负责状态之间的切换操作. 参与者: TCPConnection:(当前工作环境 Context):维护一个状态接口的实例,这个实例表示当前环境所处的状态. TCPSt

设计模式之行为型模式(四)

行为型模式用于描述程序在运行时复杂的流程控制,即描述多个类或对象之间怎样相互协作共同完成单个对象都无法单独完成的任务,它涉及算法与对象间职责的分配. 行为型模式分为类行为模式和对象行为模式,前者采用继承机制来在类间分派行为,后者采用组合或聚合在对象间分配行为.由于组合关系或聚合关系比继承关系耦合度低,满足“合成复用原则”,所以对象行为模式比类行为模式具有更大的灵活性. 行为型模式是 GoF 设计模式中最为庞大的一类,它包含以下 11 种模式. 模板方法(Template Method)模式:定义

第21章 行为型模式—观察者模式

1. 观察者模式(Observer Pattern)的定义 (1)定义:定义对象间的一种一对多的依赖关系.当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新. (2)观察者模式的结构和说明(拉模型) ①Subject:目标对象,通常具如的功能:一个目标可以被多个观察者观察:目标提供对观察者的注册和退订的维护:当目标的状态发生变化时,目标负责通知所有注册的.有效的观察者. ②Observer:定义观察者的接口,提供目标通知时对应的更新方法,这个更新方法进行相应的业务处理,可以在这

(21):(行为型模式) Memento 备忘录模式

(21):(行为型模式) Memento 备忘录模式,布布扣,bubuko.com