设计模式[3]-Observer

Type: Behavioral

观察者模式:在对象间定义一对多的依赖关系,这样当一个对象改变状态时,自动通知更新依赖他的对象。

#include <iostream>
#include <list>

using namespace std;

typedef int STATE;

class Observer
{
public:
    virtual void update(STATE state) = 0;
};

class ConcreteObserver : public Observer
{
public:
    void update(STATE state){
        cout<<"Update Observer State:"<<state<<endl;
        observerState = state;
    };
private:
    STATE observerState;
};

class Subject
{
public:
    virtual void notify();
    void attach(Observer *pObserver){
        m_ListObserver.push_back(pObserver);
    };
    void detach(Observer *pObserver){
        list<Observer*>::iterator iter;
        iter = find(m_ListObserver.begin(), m_ListObserver.end(), pObserver);
        if (m_ListObserver.end() != iter)
        {
            m_ListObserver.erase(iter);
        }
    };

protected:
    list<Observer*> m_ListObserver;
};

class ConcreteSubject : public Subject
{
public:
    void notify(){
        list<Observer*>::iterator list_it;
        for (list_it = m_ListObserver.begin(); list_it != m_ListObserver.end();
             ++list_it)
        {
            (*list_it)->update(subjectState);
        }
    };
    void setState(STATE state){
        subjectState = state;
    };
private:
    STATE subjectState;
};

int main()
{
    Observer *p1 = new ConcreteObserver;
    Observer *p2 = new ConcreteObserver;

    ConcreteSubject* p = new ConcreteSubject;
    p->attach(p1);
    p->attach(p2);
    p->setState(4);
    p->notify();

    p->detach(p1);
    p->setState(10);
    p->notify();
    system("pause");
    return 0;
}
时间: 2024-10-06 19:09:52

设计模式[3]-Observer的相关文章

设计模式:观察者模式(observer)

设计模式:观察者模式(observer) 这种设计模式大量的使用,简单的说就是观察者通过被观察者来获得外界某种事物的状态 Observer模式提供给关联对象一种同步通信的手段,使某个对象与依赖它的其他对象之间保持状态同步. 如下图: image.png 被观察者(concreteSubject):其中必然包含了一个观察者的列表,用于状态发生变化的时候通过链表进行通知每个观察者做出相应的变化 观察者(ConcreteObserver):其中必然包含各种应对外界状态变化的方法,以供被观察者调用 图中

IssueVision 学习笔记(三)-----设计模式之OBSERVER(观察者)模式

server|笔记|设计 这次我们来看看IssueVision中的对设计模式的应用,IssueVision主要使用了OBSERVER(观察者)模式和COMMAND(命令)模式.今天就来看看OBSERVER(观察者)模式在IssueVision中的应用,它在IssueVision中扮演着重要角色. "四人帮"GoF是这样定义OBSERVER(观察者)模式的------定义对象间的一种一对多的关系,当一个对象的状态发生改变时,所有依赖它的对象都得到通知,并被自动更新. 从定义可以看出,OB

Java设计模式之Observer模式

Observer模式也叫观察者模式,是由GoF提出的23种软件设计模式的一种.Observer模式是行为模式之一,它的作用是当一个对象的状态发生变化时,能够自动通知其他关联对象,自动刷新对象状态. 本文介绍设计模式中的(Observer)模式的概念,用法,以及实际应用中怎么样使用Observer模式进行开发. Observer模式的概念 Observer模式是行为模式之一,它的作用是当一个对象的状态发生变化时,能够自动通知其他关联对象,自动刷新对象状态. Observer模式提供给关联对象一种同

IssueVision 学习笔记(三)-----设计模式之OBSERVER(观察者)模式-Web_S

这次我们来看看IssueVision中的对设计模式的应用,IssueVision主要使用了OBSERVER(观察者)模式和COMMAND(命令)模式.今天就来看看OBSERVER(观察者)模式在IssueVision中的应用,它在IssueVision中扮演着重要角色. "四人帮"GoF是这样定义OBSERVER(观察者)模式的------定义对象间的一种一对多的关系,当一个对象的状态发生改变时,所有依赖它的对象都得到通知,并被自动更新. 从定义可以看出,OBSERVER(观察者)模式

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

一.观察者(Observer)模式 观察者模式又叫做发布-订阅(Publish/Subscribe)模式.模型-视图(Model/View)模式.源-监听器(Source/Listener)模式或从属者(Dependents)模式. 观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象.这个主题对象在状态上发生变化时,会通知所有观察者对象,使它们能够自动更新自己. 一个软件系统常常要求在某一个对象的状态发生变化的时候,某些其它的对象做出相应的改变.做到这一点的设计方案有很

JDK Observer设计模式研究

目前设计模式的介绍性文章越来越多,但设计模式的研究性文章仍然比较欠缺,这着实让人觉得有点遗憾.本文旨在抛砖引玉,具体分析一下java中jdk自带的observer设计模式(下文如没特别指出,observer设计模式就意指java中jdk自带的observer设计模式)的实现. 1.Observer设计模式概要 Observer设计模式在GOF里属于行为设计模式.JDK里提供的observer设计模式的实现由java.util.Observable类和java.util.Observer接口组成.

设计模式(Patterns in Java)

设计 板桥里人的设计模式讲解是国内媒体(包括书籍和网站)中最早的成体系介绍,本系列介绍纯为免费传播(转载本站文章,请保留作者和网址),尽量做到言简意赅,通俗易懂,但是难免有所疏漏敬请来信或论坛讨论,不断完善. 真正掌握设计模式需要在实践中不断研究和使用,关于设计模式在具体实例的应用,可以阅读板桥里人的书籍<Java实用系统开发指南>.书籍中8个实例都从设计模式.框架等高度对系统进行崭新的设计和实现,这种应用理念正是现在以及将来软件设计和编程的根本之道. 1:前言 学习GoF设计模式的重要性 建

使用Publish/Subscribe 设计模式达到对象间数据同步

对象|设计|数据|数据同步 使用Publish/Subscribe 设计模式达到对象间数据同步 应用程序经常需要更改和交换数据,必须传送这些更改后数据以达到对象的同步,尤其在多窗口用户界面应用程序中更要求这种数据的同步协调,在这一类应用程序中,潜在的数据更新信息一定要反映到所有被包含的子窗体中. 例如一个人员信息管理的应用程序.一次可以打开多个包含一个人名字的窗口,如果你在其中一个窗口中修改并报存了这个人的名字,你将期望对名字改变应立即显示在其它全部窗体内.可以通过使用Publish/Subsc

Java设计模式学习心得

整个设计模式贯穿一个原理:面对介面编程,而不是面对实现,(面向物件编程应该改爲面向介面编程).目标原则是:降低耦合,增强灵活性. 一.创建模式 1.设计模式之Factory(工厂方法和抽象工厂) 使用工厂模式就象使用new一样频繁. 2.设计模式之Prototype(原型) 用原型实例指定创建物件的种类,並且通过拷贝这些原型创建新的物件. 3.设计模式之Builder 汽车由车轮 方向盘 发动机很多部件组成,同时,将这些部件组装成汽车也是一件複杂的工作,Builder模式就是将这两种情况分开进行