Observer模式实践

  Observer 模式在实践中的应用场景:

  为 Point 类设计一个数据绑定机制,当其坐标 x 或 y 被更改时,可以通知外界其更改的过程。将更改过程打印在控制台上。考虑使用松耦合设计。

  代码:

#include <list>
#include <iostream>

using namespace std;

struct Observer;
struct Subject
{
    virtual void attach(Observer*) = 0;
    virtual void detach(Observer*) = 0;
    virtual void notify() = 0;
    virtual int getX() = 0;
    virtual int getY() = 0;

    list<Observer*> _observer;
};

struct Observer
{
    virtual void update(Subject*) = 0;
};

struct ConsoleObserver : public Observer {
    virtual void update(Subject *subject)
    {
        cout << subject->getX() << " " << subject->getY() << endl;
    }
};

class Point : public Subject{
    int _x;
    int _y;

public:
    virtual void attach(Observer* o)
    {
        this->_observer.push_back(o);
    }

    virtual void detach(Observer* o)
    {
        this->_observer.remove(o);
    }

    virtual void notify() {
        for (auto e : _observer)
            e->update(this);
    }

    Point(int x, int y) : _x(x), _y(y) {}

    void setX(int x)
    {
        this->_x = x;
        this->notify();
    }

    void setY(int y)
    {
        this->_y = y;
        this->notify();
    }

    int getX()
    {
        return this->_x;
    }

    int getY()
    {
        return this->_y;
    }
};

int main()
{
    Point po(1, 2);

    //绑定
    ConsoleObserver co;
    po.attach(&co);

    //值的每一次变化,都会引起控制台打印
    po.setX(3);
    po.setY(4);

    return 0;
}
时间: 2024-08-06 11:57:56

Observer模式实践的相关文章

【行为型】Observer模式

观察者模式意图解决一对多的依赖关系情形中,当被依赖对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新的问题.举个很简单的例子说,假如一个游戏中的角色的某个属性状态发生了变化,此处不妨假设为角色的等级升级了,则相应的在游戏场景中的模型展现([依赖点1])需要跟着调整,并且在UI界面上的角色属性([依赖点2])描述细节中还需要及时更新成新等级值展现给玩家.这边的[依赖点1]与[依赖点2]就依赖于角色的属性,并且对于这两个依赖点来说,属性对它们都是很敏感的,它们需要能够及时感知到这些属性的

用java.util.Observable实现Observer模式

本文转载自:dada360778512的博客 原文链接:http://blog.csdn.net/dada360778512/article/details/6977758 Observer模式  主要是观察者与被观察者之间的关系 观察者为羊,被观察者为狼  模仿的场景为狼叫羊跑 代码如下: 1.被观察者类 [java] view plaincopy package test.pattern.observer; import java.util.Observable; public class 

Observer 模式

Observer模式要解决的问题为:建立一个一(Subject)对多(Observer)的依赖关系,并且做到当"一"变化的时候,依赖这个"一"的多也能够同步改变.最常见的一个例子就是:对同一组数据进行统计分析时候,我们希望 能够提供多种形式的表示 (例如以表格进行统计显示. 柱状图统计显示. 百分比统计显示等) .这些表示都依赖于同一组数据,我们当然需要当数据改变的时候,所有的统计的显示都能够同时改变.Observer模式就是解决了这一个问题. 1 ////////

Android 适配器(Adapter)、观察者(Observer) 模式

适配器(Adapter)详述:http://blog.csdn.net/jjwwmlp456/article/details/39893723 观察者(Observer)详述:http://blog.csdn.net/jjwwmlp456/article/details/39967021 AdapterView 体系 AdapterView中会使用Adapter Adapter 体系 BaseAdapter 实现了 SpinnerAdapter.ListAdapter 这样的形式,就是 适配器模

Observer模式详解--设计模式(15)

Observer模式来源: Observer模式应该可以说是应用最多.影响最广的模式之一. 因为Observer的一个实例Model/View/Control(MVC)结构在系统开发架构设计中有着很重要的地位和意义,MVC实现了业务逻辑和表示层的解耦.在MFC中,Doc/View(文档视图结构)提供了实现MVC的框架结构(有一个从设计模式(Observer模式)的角度分析分析Doc/View的文章正在进一步的撰写当中,遗憾的是时间:)).在Java阵容中,Struts则提供和MFC中Doc/Vi

C++实现Behavioral - Observer模式 (转)

转http://patmusing.blog.163.com/blog/static/13583496020101501923571/ 也称为Dependents或Publish-Subscribe模式. 定义对象间的一种一对多的依赖关系,以便当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动更新. “Define a one-to-many dependency between objects so that when one object changes state, all i

Java 实现观察者(Observer)模式

1. Java自带的实现 类图 /** * 观察目标 继承自 java.util.Observable * @author stone * */ public class UpdateObservable extends Observable { private int data; public UpdateObservable(Observer observer) { addObserver(observer); /* * add other observer */ } public int

Observer模式

观察者模式(有时又被称为发布/订阅模式)是软件设计模式的一种.在此种模式中,一个目标对象管理所有相依于它的观察者对象,并且在它本身的状态改变时主动发出通知.这通常透过呼叫各观察者所提供的方法来实现.此种模式通常被用来实作事件处理系统. 抽象目标类别 此抽象类别提供一个接口让观察者进行添附与解附作业.此类别内有个不公开的观察者串炼,并透过下列函数(方法)进行作业: 添附(Attach):新增观察者到链表中,以追踪目标对象的变化. 解附(Detach):将已经存在的观察者从串炼中移除. 通知(Not

STM32低功耗模式实践

STM32低功耗模式实践 STM32一共有三种低功耗模式,睡眠模式.停止模式以及待机模式. 其中,睡眠模式时内核停止运行,但外设仍在工作,所有外设的时钟不会被关闭. 停止模式,除了Cortex-M3内核停止外,所有外设时钟也被关闭,可以选择使能内部时钟,SRAM和寄存器内容被保留,IO口保持为进入睡眠前的状态. 待机模式时,所有1.8V电源部分全部断电,SRAM和寄存器内容被丢失,这最为省电的一种方式,但是唤醒后就丢失了记忆. 本文选择使用停止模式,要低功耗,又要唤醒后继续运行,那stm32低功