设计模式[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;
}

目录
相关文章
|
7月前
|
设计模式 存储 Java
认真学习设计模式之观察者模式(Observer Pattern)
认真学习设计模式之观察者模式(Observer Pattern)
73 0
|
7月前
|
设计模式 监控 Java
设计模式 - 观察者模式(Observer):Java中的战术与策略
【4月更文挑战第7天】观察者模式是构建可维护、可扩展系统的关键,它在Java中通过`Observable`和`Observer`实现对象间一对多的依赖关系,常用于事件处理、数据绑定和同步。该模式支持事件驱动架构、数据同步和实时系统,但需注意避免循环依赖、控制通知粒度,并关注性能和内存泄漏问题。通过明确角色、使用抽象和管理观察者注册,可最大化其效果。
128 2
|
7月前
|
设计模式 Java
Java设计模式:什么是观察者模式(Observer Pattern)?
Java设计模式:什么是观察者模式(Observer Pattern)?
69 0
|
设计模式
设计模式16 - 观察者模式【Observer Pattern】
设计模式16 - 观察者模式【Observer Pattern】
50 0
|
设计模式 Java API
【设计模式——学习笔记】23种设计模式——观察者模式Observer(原理讲解+应用场景介绍+案例介绍+Java代码实现)
【设计模式——学习笔记】23种设计模式——观察者模式Observer(原理讲解+应用场景介绍+案例介绍+Java代码实现)
128 0
|
设计模式 Java Spring
设计模式~观察者模式(Observer)-11
它属于行为型模式的一种。观察者模式定义了一种一对多的依赖关系,一个主题对象可被多个观察者对象同时监听。当这个主题对象状态变化时,会通知所有观察者对象并作出相应处理逻辑。 目录
73 0
|
设计模式 消息中间件 NoSQL
Java中23种面试常考的设计模式之观察者模式(Observer)---行为型模式
Java中23种面试常考的设计模式之观察者模式(Observer)---行为型模式
77 1
|
设计模式 存储
设计模式-观察者模式(Observer)
设计模式-观察者模式(Observer)
97 0
|
设计模式 Java
Java设计模式-观察者模式(Observer)
Java设计模式-观察者模式(Observer)
|
设计模式 API
设计模式学习(二):Observer观察者模式
在Observer模式中,当观察对象的状态发生变化时,会通知给观察者。Observer模式适用于根据对象状态进行相应处理的场景。
173 0
设计模式学习(二):Observer观察者模式