大话设计模式--1.观察者模式: 定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,这个主题对象在状态发生变化时,会通知所有的

观察者对象,使他们能够自动更新自己。

使用场合:

当一个对象的改变需要同时改变其他对象时,而且它不知道具体有多少对象有待改变。

当一个抽象模型有两个方面,其中一个方面依赖另一个方面,这时观察者模式可以使这两者封装在独立的对象中使它们各自独立地改变和复用。

缺点: 抽象通知者 还是依赖于 抽象观察者,并不是一定能抽象出观察者这样的接口,并且每个具体的观察者并不一定是以update的方法调用,

依靠委托解决以上问题。

实例:

subject.h subject.cpp 通知者抽象

#ifndef SUBJECT_H
#define SUBJECT_H #include "Observer.h"
#include <list>
using namespace std; class Subject
{
public:
Subject();
void virtual addObserver(Observer *observer);
void virtual delObserver(Observer *observer);
void virtual notify(); private:
list<Observer*> *observer;
}; #endif // SUBJECT_H
#include "subject.h"

Subject::Subject()
{
observer = new list<Observer*>();
} void Subject::addObserver(Observer* observer)
{
this->observer->push_back(observer);
} void Subject::delObserver(Observer* observer)
{ } void Subject::notify()
{
Observer *ob;
list<Observer*>::iterator i;
for(i=observer->begin(); i!=observer->end(); i++)
{
ob = *i;
ob->update(); }
}

concretesubject.h concretesubject.cpp 通知者实例

#ifndef CONCRETESUBJECT_H
#define CONCRETESUBJECT_H #include "subject.h"
#include <string>
using namespace std; class concreteSubject : public Subject
{
public:
concreteSubject();
void setSubjectState(string state);
string getSubjectState(); private:
string subjectState;
}; #endif // CONCRETESUBJECT_H
#include "concretesubject.h"

concreteSubject::concreteSubject()
{
} void concreteSubject::setSubjectState(string state)
{
subjectState = state;
} string concreteSubject::getSubjectState()
{
return subjectState;
}

observer.h observer.cpp  观察者抽象

#ifndef OBSERVER_H
#define OBSERVER_H class Observer
{
public:
Observer();
void virtual update();
}; #endif // OBSERVER_H
#include "observer.h"

Observer::Observer()
{
} void Observer::update()
{ }

concreteobserver1.h concreteobserver1.cpp 观察者实例

#ifndef CONCRETEOBSERVER1_H
#define CONCRETEOBSERVER1_H #include "observer.h"
#include "concretesubject.h"
#include <string>
using namespace std; class ConcreteObserver1 : public Observer
{
public:
ConcreteObserver1(concreteSubject *subject, string name);
void update(); private:
string name;
string observerState;
concreteSubject* subject; }; #endif // CONCRETEOBSERVER1_H
#include "concreteobserver1.h"
#include <iostream>
using namespace std; ConcreteObserver1::ConcreteObserver1(concreteSubject *subject, string name)
{
this->subject = subject;
this->name = name;
observerState = subject->getSubjectState();
} void ConcreteObserver1::update()
{
observerState = subject->getSubjectState();
cout << "name: " << name << " ,state: " << observerState << endl;
}

main.cpp

#include <iostream>
#include "concreteobserver1.h"
#include "concretesubject.h"
using namespace std; int main()
{
cout << "Observer test !" << endl; concreteSubject s;
s.addObserver(new ConcreteObserver1(&s, "zhangsan"));
s.addObserver(new ConcreteObserver1(&s, "lisi"));
s.setSubjectState("boss comes back");
s.notify(); return 0;
}

大话设计模式--观察者模式 Observer -- C++ 实现实例的更多相关文章

  1. linkin大话设计模式--观察者模式

    linkin大话设计模式--观察者模式 观察者模式定义了对象间的一对多依赖关系,让一个或者多个观察者观察一个对象主题.当主题对象的状态发生改变的时候,系统能通知所有的依赖于此对象的观察者对象,从而能自 ...

  2. java设计模式--观察者模式(Observer)

    java设计模式--观察者模式(Observer) java设计模式--观察者模式(Observer) 观察者模式的定义: 定义对象间的一种一对多的依赖关系.当一个对象的状态发生改变时,所有依赖于它的 ...

  3. 设计模式-观察者模式(Observer Pattern)

    观察者模式(Observer Pattern):定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象.这个主题对象在状态发生变化时,会通知所有观察者对象,使他们能够自动更新自己. 观察者 ...

  4. 设计模式 - 观察者模式(Observer Pattern) 详细说明

    观察者模式(Observer Pattern) 详细说明 本文地址: http://blog.csdn.net/caroline_wendy/article/details/26583157 版权全部 ...

  5. 设计模式 - 观察者模式(Observer Pattern) 详细解释

    观察者模式(Observer Pattern) 详细解释 本文地址: http://blog.csdn.net/caroline_wendy/article/details/26583157 版权全部 ...

  6. 设计模式 - 观察者模式(Observer Pattern) Java内置 用法

    观察者模式(Observer Pattern) Java内置 用法 本文地址: http://blog.csdn.net/caroline_wendy/article/details/26601659 ...

  7. [工作中的设计模式]观察者模式observer

    一.模式解析 观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象.这个主题对象在状态上发生变化时,会通知所有观察者对象,使它们能够自动更新自己. 观察者模式又叫订阅发布模式, ...

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

    简介: 观察者模式,也称为订阅-发布模式,定义对象间的一种一对多的依赖关系,当一个对象的状态发生变化时,所有依赖他的对象都得到通知并被自动更新. 主要由以下几个部分组成: a.Subject目标对象. ...

  9. 设计模式--观察者模式Observer(对象行为型)

    一.观察者模式 观察者模式是在对象之间定义一对多的依赖,这样一来,当一个对象改变状态,依赖它的对象都会收到通知,并自动更新.观察者模式也被称之为:主题-观察者模式,发布-订阅模式,前者是一,后者是多. ...

随机推荐

  1. Linux下性能分析工具汇总

    来自:http://os.51cto.com/art/201104/253114.htm 本文讲述的是:CPU性能分析工具.Memory性能分析工具.I/O性能分析工具.Network性能分析工具. ...

  2. Unity3D性能优化之Draw Call Batching

    在屏幕上渲染物体,引擎需要发出一个绘制调用来访问图形API(iOS系统中为OpenGL ES).每个绘制调用需要进行大量的工作来访问图形API,从而导致了CPU方面显著的性能开销. Unity在运行时 ...

  3. oracle中can not set解决方法

    原因:set autotrace on和set trimspool on在pl\sql中使用不了 解决方法:在window环境中,使用cmd命令,sqlplus user_name/password@ ...

  4. 最小生成树——Prim(普利姆)算法

    [0]README 0.1) 本文总结于 数据结构与算法分析, 源代码均为原创, 旨在 理解Prim算法的idea 并用 源代码加以实现: 0.2)最小生成树的基础知识,参见 http://blog. ...

  5. Dijkstra 算法——计算有权最短路径(边有权值)

    [0]README 0.1) 本文总结于 数据结构与算法分析, 源代码均为原创, 旨在理解 Dijkstra 的思想并用源代码加以实现: 0.2)最短路径算法的基础知识,参见 http://blog. ...

  6. 速记const 指针与指向const的指针

    指向const的指针.它的意思是指针指向的内容是不能被改动的.它有两种写法. ` const int* p; (推荐) int const* p;` 再说const指针.它的意思是指针本身的值是不能被 ...

  7. 素数定理 nefu 117

    素数定理: 随着x的增长,P(x) ≍x/ln(x) ,P(x)表示(1,x)内的素数的个数. 这个定理,说明在1-x中,当x大到一定程度时,素数分布的概率为ln(x) 竟然还有一道题目. 素数个数的 ...

  8. PhotoKit详解

    Photokit介绍 这篇主要介绍如何通过 Photokit获取数据 photokit.jpg 1,基类 PHObject Photos 框架中的根类PHObject只有一个公开接口 localIde ...

  9. Frobenius Norm

    http://mathworld.wolfram.com/FrobeniusNorm.html

  10. 【python】-- Socket

    socket socket本质上就是在2台网络互通的电脑之间,架设一个通道,两台电脑通过这个通道来实现数据的互相传递. 我们知道网络 通信 都 是基于 ip+port 方能定位到目标的具体机器上的具体 ...