zoukankan      html  css  js  c++  java
  • 观察者模式

    #include <iostream>
    #include <string>
    using namespace std;
    
    class Subject
    {
    private:
        vector<Observer> observers = new List<Observer>();
    public :
        void Attach(Observer observer)
        {
            observers.push_back(observer);
        }
        void Detach(Observer observer)
        {
            for( ;; )
            {
                observers.erase(observer);
            }
        }
        void Notufy()
        {
            for(Observer o in observers)
            {
                o.Update();
            }
        }
    };
    
    class ConcreteSubject : Subject
    {
    private:
        string subjectState;
    public:
        string Subjectstate
        {
            get
            set
        }
    };
    
    class Observer
    {
    public:
        virtual void Update()=0;
    
    };
    
    class ConcreteObserver:Observer
    {
        ConcreteSubject subject;
    public:
        void update()
        {
    
            cout<<" "<<subject.subjectState<<endl;
        }
    };
    
    int main()
    {
        ConcreteSubject s = new ConcreteSubject();
        s.Attach(new ConcreteObserver());
        s.Attach(new ConcreteObserver());
        s.Attach(new ConcreteObserver());
        s.subjectState = "ABC";
        s.Notufy();
    }

    使用场景:当一个对象的改变需要同时改变其他对象的时候,而且不知道具体有多少对象有待改变时,应该考虑观察者模式。

    当一个抽象模型有两个方面,其中一个方面依赖于另一个方面,这是用观察者模式,可以将这两者封装在独立的对象中,使它们各自独立的改变和复用。

  • 相关阅读:
    IIS7最大上传附件大小配置
    数据表的identity
    服务器×××上的MSDTC不可用解决办法——Orchard(转)
    IOS项目中使用全局变量
    九宫格解锁的实现
    UINavigationControlle类详解
    jar仓库
    django安装
    django入门
    值得阅读的pyhon文章
  • 原文地址:https://www.cnblogs.com/zendu/p/6398899.html
Copyright © 2011-2022 走看看