zoukankan      html  css  js  c++  java
  • 设计模式之观察者模式_C++

      1 // ADBHelper.cpp : This file contains the 'main' function. Program execution begins and ends there.
      2 //
      3 
      4 //#include "pch.h"
      5 #include <stdafx.h>
      6 #include <iostream>
      7 #include <list>
      8 using namespace std;
      9 
     10 class Observer
     11 {
     12 public:
     13     virtual void Update(int) = 0;
     14 };
     15 
     16 class Subject
     17 {
     18 public:
     19     virtual void Attach(Observer *) = 0;
     20     virtual void Detach(Observer *) = 0;
     21     virtual void Notify() = 0;
     22 };
     23 
     24 class ConcreteObserver : public Observer
     25 {
     26 public:
     27     ConcreteObserver(Subject *pSubject) : m_pSubject(pSubject) {}
     28 
     29     void Update(int value)
     30     {
     31         cout << "ConcreteObserver get the update. New State:" << value << endl;
     32     }
     33 
     34 private:
     35     Subject *m_pSubject;
     36 };
     37 
     38 class ConcreteObserver2 : public Observer
     39 {
     40 public:
     41     ConcreteObserver2(Subject *pSubject) : m_pSubject(pSubject) {}
     42 
     43     void Update(int value)
     44     {
     45         cout << "ConcreteObserver2 get the update. New State:" << value << endl;
     46     }
     47 
     48 private:
     49     Subject *m_pSubject;
     50 };
     51 
     52 class ConcreteSubject : public Subject
     53 {
     54 public:
     55     void Attach(Observer *pObserver);
     56     void Detach(Observer *pObserver);
     57     void Notify();
     58 
     59     void SetState(int state)
     60     {
     61         m_iState = state;
     62     }
     63 
     64 private:
     65     std::list<Observer *> m_ObserverList;
     66     int m_iState;
     67 };
     68 
     69 void ConcreteSubject::Attach(Observer *pObserver)
     70 {
     71     m_ObserverList.push_back(pObserver);
     72 }
     73 
     74 void ConcreteSubject::Detach(Observer *pObserver)
     75 {
     76     m_ObserverList.remove(pObserver);
     77 }
     78 
     79 void ConcreteSubject::Notify()
     80 {
     81     std::list<Observer *>::iterator it = m_ObserverList.begin();
     82     while (it != m_ObserverList.end())
     83     {
     84         (*it)->Update(m_iState);
     85         ++it;
     86     }
     87 }
     88 
     89 int main()
     90 {
     91     // Create Subject
     92     ConcreteSubject *pSubject = new ConcreteSubject();
     93 
     94     // Create Observer
     95     Observer *pObserver = new ConcreteObserver(pSubject);
     96     Observer *pObserver2 = new ConcreteObserver2(pSubject);
     97 
     98     // Change the state
     99     pSubject->SetState(2);
    100 
    101     // Register the observer
    102     pSubject->Attach(pObserver);
    103     pSubject->Attach(pObserver2);
    104 
    105     pSubject->Notify();
    106 
    107     // Unregister the observer
    108     pSubject->Detach(pObserver);
    109 
    110     pSubject->SetState(3);
    111     pSubject->Notify();
    112 
    113     delete pObserver;
    114     delete pObserver2;
    115     delete pSubject;
    116 }
    117 
    118 // Run program: Ctrl + F5 or Debug > Start Without Debugging menu
    119 // Debug program: F5 or Debug > Start Debugging menu
    120 
    121 // Tips for Getting Started: 
    122 //   1. Use the Solution Explorer window to add/manage files
    123 //   2. Use the Team Explorer window to connect to source control
    124 //   3. Use the Output window to see build output and other messages
    125 //   4. Use the Error List window to view errors
    126 //   5. Go to Project > Add New Item to create new code files, or Project > Add Existing Item to add existing code files to the project
    127 //   6. In the future, to open this project again, go to File > Open > Project and select the .sln file

    转载:https://www.cnblogs.com/carsonzhu/p/5770253.html

    未完,待描述……

  • 相关阅读:
    python基础之====函数对象、函数嵌套、名称空间与作用域、装饰器
    python基础之函数基础
    pytho基础之文件处理
    python基础之字符编码
    python基础之数据类型与变量
    python基础之核心风格
    函数
    数据类型、字符编码、文件处理
    MongoDB
    Shell学习(三)——Shell条件控制和循环语句
  • 原文地址:https://www.cnblogs.com/YangARTuan/p/14267158.html
Copyright © 2011-2022 走看看