`

[行为型模式] 观察者模式的理解

 
阅读更多




头文件
//ObserverPattern.h

#ifndef OBSERVER_PATTERN_H
#define OBSERVER_PATTERN_H

#include <Windows.h>
#include <iostream>
#include <list>
using namespace std;

namespace ObserverPattern
{
    class Observer
    {
    public:
        virtual void Update(int) = 0;
    };

    class Subject
    {
    public:
        virtual void Attach(Observer *) = 0;
        virtual void Detach(Observer *) = 0;
        virtual void Notify() = 0;
    };

    class ConcreteObserver : public Observer
    {
    public:
        ConcreteObserver(Subject *pSubject) : m_pSubject(pSubject){}

        void Update(int value)
        {
            cout<<"ConcreteObserver get the update. New State:"<<value<<endl;
        }

    private:
        Subject *m_pSubject;
    };

    class ConcreteObserver2 : public Observer
    {
    public:
        ConcreteObserver2(Subject *pSubject) : m_pSubject(pSubject){}

        void Update(int value)
        {
            cout<<"ConcreteObserver2 get the update. New State:"<<value<<endl;
        }

    private:
        Subject *m_pSubject;
    };

    class ConcreteSubject : public Subject
    {
    public:
        void Attach(Observer *pObserver);
        void Detach(Observer *pObserver);
        void Notify();

        void SetState(int state)
        {
            m_iState = state;
        }

    private:
        std::list<Observer *> m_ObserverList;
        int m_iState;
    };

    //////////////////////////////////////////////////////////////////////////
    void ObserverPattern_Test();
}

#endif


实现
#include "ObserverPattern.h"

namespace ObserverPattern
{
    void ConcreteSubject::Attach(Observer *pObserver)
    {
        m_ObserverList.push_back(pObserver);
    }

    void ConcreteSubject::Detach(Observer *pObserver)
    {
        m_ObserverList.remove(pObserver);
    }

    void ConcreteSubject::Notify()
    {
        std::list<Observer *>::iterator it = m_ObserverList.begin();
        while (it != m_ObserverList.end())
        {
            (*it)->Update(m_iState);
            ++it;
        }
    }

    //////////////////////////////////////////////////////////////////////////
    void ObserverPattern_Test()
    {
        // Create Subject
        ConcreteSubject *pSubject = new ConcreteSubject();

        // Create Observer
        Observer *pObserver = new ConcreteObserver(pSubject);
        Observer *pObserver2 = new ConcreteObserver2(pSubject);

        // Change the state
        pSubject->SetState(2);

        // Register the observer
        pSubject->Attach(pObserver);
        pSubject->Attach(pObserver2);

        pSubject->Notify();

        // Unregister the observer
        pSubject->Detach(pObserver);

        pSubject->SetState(3);
        pSubject->Notify();

        delete pObserver;
        delete pObserver2;
        delete pSubject;
    }
}


客户端
#include "ObserverPattern.h"
using namespace ObserverPattern;

void main()
{
    ObserverPattern_Test();
}


运行结果
分享到:
评论

相关推荐

    C#面向对象设计模式纵横谈(19):(行为型模式) Observer 观察者模式 (Level 300)

    **C#面向对象设计模式纵横谈(19)**:**观察者模式**(Observer Pattern)是行为型模式的一种,它在软件工程中扮演着至关重要的角色。观察者模式是一种设计模式,它定义了对象之间的一对多依赖关系,当一个对象的状态...

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

    ### (行为型模式) Observer 观察者模式 #### 概述 观察者模式是一种行为设计模式,它定义了一种一对多的关系,让多个观察对象同时监听某一个主题对象。当主题对象发生变化时,所有观察者对象都会收到通知并进行...

    设计模式实现——观察者模式

    观察者模式(Observer Pattern)是软件设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式常用于实现发布-订阅...

    java观察者模式观察者模式

    观察者模式是设计模式中的一种行为模式,它在Java编程中有着广泛的应用。该模式的主要目的是定义对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式也被...

    java 设计模式 观察者模式 简单实例 包括测试test类

    观察者模式(Observer Pattern)是软件设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式常用于实现事件驱动或者发布...

    iOS 设计模式 观察者模式

    观察者模式,也被称为发布-订阅(Publish-Subscribe)模式,是软件设计中的一种行为模式。在iOS开发中,它是一种让多个对象监听或订阅某一个主题对象的状态变化,并在状态变化时自动收到通知的方式。这种模式使得...

    设计模式之观察者模式

    观察者模式是软件设计模式中的一种行为模式,它在对象之间定义了一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式广泛应用于事件驱动编程、发布/订阅系统...

    设计模式-观察者

    观察者模式(Observer Pattern)是行为设计模式的一种,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。 观察者模式的核心思想是发布-订阅模型,其中...

    运用MVC模式及观察者模式的java小程序

    在Java编程领域,设计模式是解决常见问题的模板或最佳实践。在这个名为“运用MVC模式及观察者模式的java小程序”的项目中,我们重点探讨了两种经典的...分析和学习这些代码将有助于深入理解MVC和观察者模式的实际应用。

    23种设计模式,创建型模式共5种,结构型模式7种,行为型模式11种

    6. **观察者模式**:定义了一对多的依赖关系,当一个对象的状态改变时,所有依赖它的对象都会得到通知并自动更新。 7. **备忘录模式**:在不破坏封装的前提下,捕获对象的内部状态,以便之后恢复对象状态。 8. **...

    Qt设计模式之观察者模式

    本篇文章将深入探讨Qt中的观察者模式(Observer Pattern),这是一种行为设计模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。 观察者模式的核心...

    观察者模式练习

    观察者模式(Observer Pattern)是软件设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式常用于事件驱动的系统或者...

    java 了解观察者模式

    观察者模式,也被称为发布-订阅(Publish-Subscribe)模式,是软件设计模式中的行为模式之一,主要用于对象间的一对多依赖关系管理。在Java中,观察者模式的实现主要依赖于`java.util.Observable`和`java.util....

    观察者模式模版和例子

    观察者模式(Observer Pattern)是设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。这种模式常用于实现事件驱动的系统或者...

    观察者模式源码

    观察者模式(Observer Pattern)是软件设计模式的一种,属于行为型模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。在Java中,观察者模式主要通过...

    设计模式例子,观察者模式,建造者模式

    观察者模式是一种行为设计模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式在事件驱动编程中非常常见,例如用户界面组件之间的交互。 1....

Global site tag (gtag.js) - Google Analytics