zoukankan      html  css  js  c++  java
  • observe模式

     1 #include <iostream>
     2 #include <string>
     3 #include <vector>
     4 #include <cstdlib>
     5 #include <map>
     6 #include <list>
     7 #include <algorithm>
     8 using namespace std;
     9 typedef string State;
    10 
    11 class SecretaryBase;
    12 //抽象观察者
    13 class CObserverBase {
    14 protected:
    15     string name;
    16     SecretaryBase* sub;
    17 public:
    18     CObserverBase(string strname, SecretaryBase* strsub) {
    19         name = strname;
    20         sub = strsub;
    21     }
    22     virtual void Update()=0;
    23 };
    24 //具体的观察者,看股票的
    25 class StockObserver: public CObserverBase {
    26 public:
    27     StockObserver(string strname, SecretaryBase* strsub) :
    28             CObserverBase(strname, strsub) {
    29     }
    30     virtual void Update();
    31 };
    32 
    33 //具体观察者,看NBA的
    34 class NBAObserver: public CObserverBase {
    35 public:
    36     NBAObserver(string strname, SecretaryBase* strsub) :
    37             CObserverBase(strname, strsub) {
    38     }
    39     virtual void Update();
    40 };
    41 
    42 //抽象通知者
    43 class SecretaryBase {
    44 public:
    45     string action;
    46     vector<CObserverBase*> observers;
    47 public:
    48     virtual void Attach(CObserverBase* observer)=0;
    49     virtual void Notify()=0;
    50 };
    51 
    52 //具体通知者
    53 class Secretary: public SecretaryBase {
    54 public:
    55     void Attach(CObserverBase* ob) {
    56         observers.push_back(ob);
    57     }
    58     void Notify() {
    59         vector<CObserverBase*>::iterator p = observers.begin();
    60         while (p != observers.end()) {
    61             (*p)->Update();
    62             p++;
    63         }
    64     }
    65 };
    66 
    67 void StockObserver::Update() {
    68     cout << name << ":" << sub->action << ",不要玩股票了,要开始工作了" << endl;
    69 }
    70 void NBAObserver::Update() {
    71     cout << name << ":" << sub->action << ",不要看NBA了,老板来了" << endl;
    72 }
    73 
    74 int main() {
    75     SecretaryBase *p = new Secretary(); //创建观察者
    76 
    77     //被观察的对象
    78     CObserverBase *s1 = new NBAObserver("小李", p);
    79     CObserverBase *s2 = new StockObserver("小赵", p);
    80     //加入观察队列
    81     p->Attach(s1);
    82     p->Attach(s2);
    83     //事件
    84     p->action = "老板来了";
    85     //通知
    86     p->Notify();
    87 
    88     return 0;
    89 }
  • 相关阅读:
    oracle 如何查看oracle数据库版本
    oracle 拼接字符串的两种方式
    ibatis 批量更新(二)
    ibatis中#和$如何当作字符使用?
    SVM核技巧的经典解释
    Koch 分形,海岸线,雪花
    Java程序猿笔试面试之String
    一步一步在Windows下搭建React Native Android开发环境
    IOS是否在项目中存在,所使用的反射那点事
    图的深度搜索和广度搜索
  • 原文地址:https://www.cnblogs.com/kakamilan/p/2620278.html
Copyright © 2011-2022 走看看