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

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

热门文章

最新文章

  • 1
    设计模式转型:从传统同步到Python协程异步编程的实践与思考
    64
  • 2
    C++一分钟之-设计模式:工厂模式与抽象工厂
    55
  • 3
    《手把手教你》系列基础篇(九十四)-java+ selenium自动化测试-框架设计基础-POM设计模式实现-下篇(详解教程)
    63
  • 4
    C++一分钟之-C++中的设计模式:单例模式
    79
  • 5
    《手把手教你》系列基础篇(九十三)-java+ selenium自动化测试-框架设计基础-POM设计模式实现-上篇(详解教程)
    49
  • 6
    《手把手教你》系列基础篇(九十二)-java+ selenium自动化测试-框架设计基础-POM设计模式简介(详解教程)
    81
  • 7
    Java面试题:结合设计模式与并发工具包实现高效缓存;多线程与内存管理优化实践;并发框架与设计模式在复杂系统中的应用
    70
  • 8
    Java面试题:设计模式在并发编程中的创新应用,Java内存管理与多线程工具类的综合应用,Java并发工具包与并发框架的创新应用
    54
  • 9
    Java面试题:如何使用设计模式优化多线程环境下的资源管理?Java内存模型与并发工具类的协同工作,描述ForkJoinPool的工作机制,并解释其在并行计算中的优势。如何根据任务特性调整线程池参数
    63
  • 10
    Java面试题:请列举三种常用的设计模式,并分别给出在Java中的应用场景?请分析Java内存管理中的主要问题,并提出相应的优化策略?请简述Java多线程编程中的常见问题,并给出解决方案
    137