设计模式3--observer(观察者模式)

observer(观察者模式)

观察者模式主要解决的问题是:

  • 多个类对同一个数据的关注

适用于:

  • 一个数据的多种展示方式
  • 进度条

  • observer.png

观察者接口定义

/**
 * 观察者接口
 */
class observerInterface
{
public:
    virtual void showData(int n)=0;
    ~observerInterface(){}
};

观察者实现1

/**
 * 观察者1
 */
class observerOne : public observerInterface
{
public:
    virtual void showData(int n)
    {
        cout<<"观察者1被通知,数据"<<n<<endl;
    }
};

观察者实现2

/**
 * 观察者2
 */
class observerTwo : public observerInterface
{
public:
    virtual void showData(int n)
    {
        cout<<"观察者2被通知,数据"<<n<<endl;

    }
};

模拟进度条数据通知观察者

/**
 * 进度条
 */
class dataDeal
{
protected:
    //所有观察者
    std::list<observerInterface*> observers;
public:
    void dealData()
    {
        for(int i=0; i<5; i++)
        {
            //通知所有观察者
            tellObserver(i);
        }
    }
    void addObserver(observerInterface* ob)
    {
        observers.push_back(ob);
    }
    void removeObserver(observerInterface* ob)
    {
        observers.remove(ob);
    }
    void tellObserver(int i)
    {
        for(auto p : observers)
        {
            p->showData(i);
        }
    }
};

测试

#include <iostream>
#include <list>
using namespace std;
int main(int argc, char const *argv[]) {
    dataDeal* dp = new dataDeal();
    dp->addObserver(new observerOne());
    dp->addObserver(new observerTwo());
    dp->dealData();
    return 0;
}

observer.png
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 179,263评论 25 708
  • 走过那么多条街,找了那么多人,后来还是自己一个人熬了过来。其实每熬过一次,就成熟一次,但这并不代表下一次就不会难过...
    绝恋腹黑女王阅读 212评论 0 0
  • 善解人意并不一定是真的 我们生活在周遭的世界里,总会遇到那些费解的事情,朋友和谁谁结婚了?那个他离婚了...
    止于丘隅阅读 182评论 0 0

友情链接更多精彩内容