Observer观察者模式

原创 2015年07月06日 20:57:30
#include <iostream>
#include <string.h>
#include <vector>
using namespace std;
//观察者模式。
//定义了一对多的关系,让多个观察对象同时监听一个主题对象,
//当主题对象发生变化时,多个对象作出相应的响应。
class School
{
public:
    School(char *s)
    {
        str = new char[strlen(s)];
        strcpy(str,s);
    }
    char *GetState()
    {
        return str;
    }
    virtual void Say() = 0;
private:
    char *str;
};
class Student1 : public School
{
public:
    Student1(char *str) :School(str){}
    void Say()
    {
        cout <<GetState()<<"!Student1别玩手机了。" << endl;
    }
private:
};
class Student2 : public School
{
public:
    Student2(char *str) :School(str){}
    void Say()
    {
        cout <<GetState()<< "!Student2别玩游戏了" << endl;
    }
private:
};

class SayerBase
{
public:
    virtual void AddMember(School *sl) = 0;
    virtual void Shout() = 0;
    virtual void Remove(School *sl) = 0;
protected:
    vector<School *> vtr;
};
class Sayer1 : public SayerBase
{
public:
    void AddMember(School *sl)
    {
        vtr.push_back(sl);
    }
    void Shout()
    {
        vector<School *>::iterator it;
        it = vtr.begin();
        while (it != vtr.end())
        {
            (*it)->Say();
            it++;
        }   
    }
    void Remove(School *sl)
    {
        vector<School*> ::iterator it = vtr.begin();
        while (it != vtr.end())
        {
            if (*it == sl)
            {
                vtr.erase(it);
                return;
            }
        }
    }
private:
};
int main()
{
    SayerBase *sb = new Sayer1();//创建一个通知对象。
    School *s1 = new Student1("老师来了");
    School *s2 = new Student2("老师来了");

    sb->AddMember(s1);
    sb->AddMember(s2);
    sb->Shout();

    sb->Remove(s1);
    sb->Shout();
    return 0;
}

设计模式 - 观察者模式(Observer Pattern) 详解

观察者模式(Observer Pattern) 详解 本文地址: http://blog.csdn.net/caroline_wendy/article/details/26583157 版权...
  • u012515223
  • u012515223
  • 2014年05月22日 14:37
  • 2975

设计模式——观察者模式(Observer)

要想正确理解设计模式,首先必须明确它是为了解决什么问题而提出来的。 设计模式学习笔记,欢迎交流。 ——Shulin 转载请注明出处:http://blog.csdn.net/zhsh...
  • u012909091
  • u012909091
  • 2014年08月20日 16:52
  • 2948

利用Spring实现观察者模式(Oberver)

转载:http://www.zhengmenbb.com/archives/298.htm 侦听者类: Observer package com.zhengmenbb.spring.liste...
  • u010571844
  • u010571844
  • 2015年03月02日 14:51
  • 895

nodejs 设计思想杂记 三 observer模式

观察者模式:一个对象,当其状态改变时能够通知一系列的观察者。 EventEmitter 看图说话 使用方法: var EventEmitter = require('events').Event...
  • oZuoQi
  • oZuoQi
  • 2016年07月06日 12:55
  • 821

设计模式-深入解析观察者模式(Observer)

在上篇设计模式上我们继续前进把,苦逼(酷毙)的程序员一刻都不能松懈的,要紧跟脚步,每天都学习啊!!学了策略模式,我自己去用设计模式写了几个例子,感觉还扣以啊。下面继续总结一下观察者模式的学习,如有不正...
  • qq_29282475
  • qq_29282475
  • 2015年12月07日 16:16
  • 1319

Android设计模式之观察者模式(Observer Pattern)

观察者模式介绍观察者模式是一个使用率非常高的模式,它最常用的地方就是GUI系统、订阅–发布系统。因为这个模式的一个重要作用就是解耦,将观察者和被观察者解耦,使得它们之间的依赖性更小,甚至做到毫无依赖。...
  • happy_horse
  • happy_horse
  • 2016年05月30日 21:05
  • 1838

深入浅出设计模式python版——观察者模式(observer)

书中第二个设计模式——观察者模式 首先,祭出类图 然后是java内置的观察者模式类图 书中举得例子:...
  • tuantuanlin
  • tuantuanlin
  • 2016年04月24日 22:51
  • 1593

反应器模式(Reactor pattern)与观察者模式(Observer pattern)

将事件多路分用 将事件分派到各自相应的事件处理程序 分布式系统中的服务器应用程序必须处理多个向它们发送服务请求的客户机。然而,在调用特定的服务之前,服务器应用程序必须将每个传入请求多...
  • longruanyi
  • longruanyi
  • 2010年08月04日 08:19
  • 3616

设计模式介绍之七:观察者模式(observer)

观察者模式(又称发布/订阅模式)定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时, 所有依赖于它的对象都得到通知并被自动更新...
  • foruok
  • foruok
  • 2014年02月18日 19:55
  • 7373

观察者模式(Observer 模式)

一、 概述  观察者模式是对象的行为模式,又叫发布-订阅(Publish/Subscribe)模式、模型-视图(Model/View)模式、源-监听器(Source/Listener)模式或从属者(D...
  • l_lhc
  • l_lhc
  • 2016年02月25日 18:12
  • 557
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Observer观察者模式
举报原因:
原因补充:

(最多只允许输入30个字)