Observer
#include <iostream>
#include <list> using namespace std; #define DESTROY_POINTER(ptr) if (ptr) { delete ptr; ptr = NULL; } class Observer
{
public:
virtual void Update(string sSubjectAttr)=;
}; class ConcreteObserverA : public Observer
{
public:
ConcreteObserverA() {}
~ConcreteObserverA() {} void Update(string sSubjectAttr) { cout<<"ConcreteObserverA::Udate accoring to ["<<sSubjectAttr<<"]"<<endl; }
}; class ConcreteObserverB : public Observer
{
public:
ConcreteObserverB() {}
~ConcreteObserverB() {} void Update(string sSubjectAttr) { cout<<"ConcreteObserverB::Udate accoring to ["<<sSubjectAttr<<"]"<<endl; }
}; class ConcreteObserverC : public Observer
{
public:
ConcreteObserverC() {}
~ConcreteObserverC() {} void Update(string sSubjectAttr) { cout<<"ConcreteObserverC::Udate accoring to ["<<sSubjectAttr<<"]"<<endl; }
}; class Subject
{
public:
Subject() {}
~Subject(); void AddObserver(Observer* pObserver) { m_observerList.push_back(pObserver); }
void SetAttr(string sAttr); private:
list<Observer*> m_observerList;
}; Subject::~Subject()
{
list<Observer*>::iterator iter; for (iter = m_observerList.begin(); iter != m_observerList.end(); iter++)
{
Observer* pTemp = *iter;
DESTROY_POINTER(pTemp);
} m_observerList.clear();
} void Subject::SetAttr(string sAttr)
{
list<Observer*>::iterator iter; for (iter = m_observerList.begin(); iter != m_observerList.end(); iter++)
{
(*iter)->Update(sAttr);
}
} int main(int argc, char *argv[])
{
Subject subject; subject.AddObserver(new ConcreteObserverA);
subject.AddObserver(new ConcreteObserverB);
subject.AddObserver(new ConcreteObserverC); subject.SetAttr("Attr add");
subject.SetAttr("Attr remove"); return ;
}
Observer的更多相关文章
- HTML5新特性之Mutation Observer
Mutation Observer(变动观察器)是监视DOM变动的接口.当DOM对象树发生任何变动时,Mutation Observer会得到通知. 要概念上,它很接近事件.可以理解为,当DOM发生变 ...
- 行为型模式之Observer模式
观察者模式(又被称为发布-订阅模式.模型-视图模式.源-收听者模式或从属者模式) 观察者模式中,一个目标对象管理所有依赖于它的观察者对象,并且在它本身的状态改变时主动发出通知. 应用场景 拍卖会可以认 ...
- C#设计模式系列:观察者模式(Observer)
在软件构建过程中,需要为某些对象建立一种“通知依赖关系”,即一个对象的状态发生改变,所有的依赖对象都需要得到通知. 1.观察者模式简介 1.1>.定义 定义对象间的一种一对多的依赖关系,当一个对 ...
- C# ~ 从 委托事件 到 观察者模式 - Observer
委托和事件的部分基础知识可参见 C#/.NET 基础学习 之 [委托-事件] 部分: 参考 [1]. 初识事件 到 自定义事件: [2]. 从类型不安全的委托 到 类型安全的事件: [3]. 函数指针 ...
- 设计模式-观察者模式(Observer Model)
文 / vincentzh 原文连接:http://www.cnblogs.com/vincentzh/p/6031844.html LZ刚刚开始心热的开启了博客之路,想着记点流水账,可帝都的天都冷成 ...
- 十一个行为模式之观察者模式(Observer Pattern)
定义: 定义对象之间一种一对多的关系,当被观察者状态变化时,可以自动地通知观察者并执行相关的业务操作.观察者模式又被称为发布-订阅模式等. 结构图: Subject:抽象主题类,定义了所有被观察类的通 ...
- 观察者模式(Observer和Observable实现)
package com.wzy.java8.thread; import java.util.Observable; import java.util.Observer; public class D ...
- C# 关于委托和事件的妙文:通过一个例子详细介绍委托和事件的作用;Observer模式简介
委托和事件在 .Net Framework中的应用非常广泛,然而,较好地理解委托和事件对很多接触C#时间不长的人来说并不容易.它们就像是一道槛儿,过了这个槛的人,觉得真是太容易了,而没有过去的人每次见 ...
- java中观察者模式Observable和Observer
25.java中观察者模式Observable和Observer 如果想要实现观察者模式,则必须依靠java.util包中提供的Observable类和Observer接口 观察者设计模式 现在很多的 ...
- Observer,Observable实现观察者模式
(#)个人对于观察者的理解:观察者与发布订阅模式是非常的相似的,例如当多个威信使用者订阅了同一个主题之后,那么这个主题就是一个被观察者,而这些用户就是观察 者,当这个主题更新了新的内容以后,就要通知所 ...
随机推荐
- Python深入03 对象的属性
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! Python一切皆对象(object),每个对象都可能有多个属性(attribut ...
- R中根据匹配原则将一列拆分为几列的方法
例如我们需要将一下数据的第二列从and处拆分为两列: before = data.frame(attr = c(1,30,4,6), type=c('foo_and_bar','foo_and_bar ...
- XML通過XSD產生CLASS
步驟一:通過XML獲取XSD 格式:xsd "XML的完整路徑帶文件名" /O:"輸出路徑不帶文件名". C:\Windows\system32>xsd ...
- struts (七) 域模型
1.域模型获取参数 domain Model 2. vo value object 值对象 do data object 数据对象 dto data transfer object 数据传输对 ...
- CRM SQL 创建活动 ActivityPointer
只是插入的任务,邮件,约会之类的没有研究,以下是官方文档:https://msdn.microsoft.com/zh-cn/library/gg334533.aspx /* 1 实体名 new_xxx ...
- 将Word文档发给别人时如何限制别人只能修改文档部分内容
将Word文档发给别人时如何限制别人只能修改文档部分内容 转自:互联网.时间:2014-04-16 作者:snow 来源:互联网 在很多情况下我们都不希望别人修改我们的文档内容,特别实在将W ...
- 关于 Python Iterator 协议的一点思考
转:http://www.jianshu.com/p/dcf83643deeb Python 中有好几种容器或者序列类型:list tuple dict set str,对于这些类型中的内容,往往需要 ...
- (medium)LeetCode 221.Maximal Square
Given a 2D binary matrix filled with 0's and 1's, find the largest square containing all 1's and ret ...
- (转) C# textbox 限制输入问题
原理:e.handled代表这次按键动作是否交由用户自己处理,如果为true代表由用户处理,系统不再过问,这里的应用是拦截,即通知系统我要处理这个数据,但又不处理(丢弃数据),从而实现拦截的效果. 在 ...
- LPC1788 SDRAM运行程序
折腾了很久 终于解决了 从SDRAM中运行APP程序. 说明:LPC1788 本身有512K的flash和96K的RAM.支持TFT和SDRAM 这算是跟别家cortex-M3架构MCU相比较的一个亮 ...