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观察者模式

  • 2012年09月20日 16:36
  • 6KB
  • 下载

observer观察者模式

  • 2017年01月19日 11:50
  • 1.17MB
  • 下载

观察者模式_OBSERVER_案例详解

观察者模式_OBSERVER_案例详解 1、Observer案例 在23种设计模式中,观察者模式算是模式设计中的皇后,尤其是在我们做软件设计过的过程中所体现的更是立足无穷,再说它好,还不如来个实例...

观察者模式(ObServer)

观察者模式(ObServer) 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时, 所有依赖于它的对象都得到通知并被自动更新 /* * 观察者模式(Observer) ...

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

  • 2011年07月07日 09:36
  • 11KB
  • 下载

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

  • 2012年09月29日 23:51
  • 176KB
  • 下载

观察者模式(Observer)—水泥厂发通知

观察者模式 观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。 这个主题对象在状态上发生变化时,会通知所有观察者对象,使它们能够自动更新自己。 类图 角色 抽象主题...
  • wugouzi
  • wugouzi
  • 2016年01月08日 13:59
  • 815

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

  • 2009年12月05日 19:51
  • 10.72MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Observer观察者模式
举报原因:
原因补充:

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