#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的更多相关文章

  1. HTML5新特性之Mutation Observer

    Mutation Observer(变动观察器)是监视DOM变动的接口.当DOM对象树发生任何变动时,Mutation Observer会得到通知. 要概念上,它很接近事件.可以理解为,当DOM发生变 ...

  2. 行为型模式之Observer模式

    观察者模式(又被称为发布-订阅模式.模型-视图模式.源-收听者模式或从属者模式) 观察者模式中,一个目标对象管理所有依赖于它的观察者对象,并且在它本身的状态改变时主动发出通知. 应用场景 拍卖会可以认 ...

  3. C#设计模式系列:观察者模式(Observer)

    在软件构建过程中,需要为某些对象建立一种“通知依赖关系”,即一个对象的状态发生改变,所有的依赖对象都需要得到通知. 1.观察者模式简介 1.1>.定义 定义对象间的一种一对多的依赖关系,当一个对 ...

  4. C# ~ 从 委托事件 到 观察者模式 - Observer

    委托和事件的部分基础知识可参见 C#/.NET 基础学习 之 [委托-事件] 部分: 参考 [1]. 初识事件 到 自定义事件: [2]. 从类型不安全的委托 到 类型安全的事件: [3]. 函数指针 ...

  5. 设计模式-观察者模式(Observer Model)

    文 / vincentzh 原文连接:http://www.cnblogs.com/vincentzh/p/6031844.html LZ刚刚开始心热的开启了博客之路,想着记点流水账,可帝都的天都冷成 ...

  6. 十一个行为模式之观察者模式(Observer Pattern)

    定义: 定义对象之间一种一对多的关系,当被观察者状态变化时,可以自动地通知观察者并执行相关的业务操作.观察者模式又被称为发布-订阅模式等. 结构图: Subject:抽象主题类,定义了所有被观察类的通 ...

  7. 观察者模式(Observer和Observable实现)

    package com.wzy.java8.thread; import java.util.Observable; import java.util.Observer; public class D ...

  8. C# 关于委托和事件的妙文:通过一个例子详细介绍委托和事件的作用;Observer模式简介

    委托和事件在 .Net Framework中的应用非常广泛,然而,较好地理解委托和事件对很多接触C#时间不长的人来说并不容易.它们就像是一道槛儿,过了这个槛的人,觉得真是太容易了,而没有过去的人每次见 ...

  9. java中观察者模式Observable和Observer

    25.java中观察者模式Observable和Observer 如果想要实现观察者模式,则必须依靠java.util包中提供的Observable类和Observer接口 观察者设计模式 现在很多的 ...

  10. Observer,Observable实现观察者模式

    (#)个人对于观察者的理解:观察者与发布订阅模式是非常的相似的,例如当多个威信使用者订阅了同一个主题之后,那么这个主题就是一个被观察者,而这些用户就是观察 者,当这个主题更新了新的内容以后,就要通知所 ...

随机推荐

  1. js中使用s(c)标签

    在js或者jquery中使用s标签,其实并不难理解,s标签也只是一个标签而已,当你想象成js+s标签=js+html标签就理解了 例如: <script type="text/java ...

  2. springmvc使用pojo和servlet原生api作为参数

    一.Pojo作为参数: 实体: package com.hy.springmvc.entities; public class User { private String username; priv ...

  3. http.StripPrefix 的参数含义

    看下面两行代码: http.Handle("/file/", http.StripPrefix("/file", http.FileServer(http.Di ...

  4. 十步让 WebForm项目 变为 Mvc项目

    1.创建一个项目名为 App_Asp 的 Asp.NET 空 Web 应用程序2.添加全局应用程序类 Global.asax3.富文本打开 Global,修改 Inherits 为 App_Asp_G ...

  5. Hive基础之自定义封装hivefile命令

    存在的问题:当把hql写到shell中,不方便阅读:但把hql写到文件中,又传递不了参数:怎么办呢? 自定义hivefile 执行方式形如: 第一个参数为要执行的hql文件,后续的参数为要替换的key ...

  6. CS中调用微软自带com组件实现音频视频播放(wf/wpf)

    1.mp3播放器:工具箱中右键,在弹出的菜单中选择“选择项”,添加“com组件”,选择名称“windows Media Player",点击确定就会在工具箱新增一个“windows Medi ...

  7. windows中 dll 的解读

    背景: dll 可以认为是exe 的分割,分割的好处就是多个exe 可以共用一个dll.所以就有了dll的依赖问题 问题来源: 当我们安装软件时(windows系统下),报出:XX.dll  缺失,或 ...

  8. android 多级下拉菜单实现教程

    原创,如转载请标明链接:http://blog.csdn.net/q610098308/article/details/50333387 很多App,都有二级菜单出现,但android 本身实现的菜单 ...

  9. It English 每日更新

    unary operator 一元运算符 short circuit evaluation 短路经查询

  10. Comparing cards

    For built-in types, there are conditional operators (<, >, ==, etc.) that compare values and d ...