zoukankan      html  css  js  c++  java
  • 大话设计模式-观察者模式

    观察者模式:定义一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有的观察者对象,使他们能够各自更新自己。

     1 // Observer.cpp : 定义控制台应用程序的入口点。
     2 //
     3 
     4 #include "stdafx.h"
     5 #include <iostream>
     6 #include <list>
     7 #include <string>
     8 using namespace std;
     9 
    10 class Observer{
    11 public:
    12     virtual void Update()=0;
    13 };
    14 class Subject{
    15 public:
    16     virtual void addObserver(Observer *obs)=0;
    17     virtual void deleteObserver(Observer *obs)=0;
    18     virtual void Update()=0;
    19 };
    20 
    21 class ConcreteSubject:public Subject{
    22 private:
    23     list<Observer*> listobs;
    24 public:
    25     void addObserver(Observer *obs){
    26         listobs.push_back(obs);
    27     }
    28     void deleteObserver(Observer *obs){
    29         listobs.remove(obs);
    30     }
    31     void Update(){
    32         list<Observer*>::iterator it;
    33         for(it=listobs.begin();it!=listobs.end();it++){
    34             (*it)->Update();
    35         }
    36     }
    37 };
    38 
    39 class ConcreteObserver:public Observer{
    40 
    41 private:
    42     string name;
    43 public:
    44     ConcreteObserver(string name){
    45         this->name = name;
    46     }
    47     void Update(){
    48         std::cout << this->name << "update()!!!"<<endl;
    49     }
    50 };
    51 int _tmain(int argc, _TCHAR* argv[])
    52 {
    53 
    54     Subject * su1 = new ConcreteSubject();
    55     Observer * obs = new ConcreteObserver("su1");
    56     su1->addObserver(obs);
    57     su1->Update();
    58 
    59     return 0;
    60 }

    观察者模式的关键对象时主题subject和观察者observe,一个subject可以有任意数目的依赖它的Observe,一旦subject的状态发生变化,所有的observer就可以得到通知。

    当一个对象的改变需要同时改变其他对象,而且它还不知道具有还有多少对象需要改变时,需要考虑使用观察者模式。

    观察者模式的所有工作就是接触耦合,让耦合的双方都依赖于抽象,而不是依赖于具体,从而使各自的变化都不会影响另一边的变化。

  • 相关阅读:
    php里面的变量的使用
    thinkphp框架的大D方法应用
    微信号的openid的深入理解
    thinkphp中的常见静态常亮
    微信qq,新浪等第三方授权登录的理解
    linux的脚本应用for循环答应变量
    linux的slect的脚本适用于交互
    linux下面的打包压缩命令
    linux下面的智能解压脚本smart解压
    Enum 枚举小结 java **** 最爱那水货
  • 原文地址:https://www.cnblogs.com/zhangjxblog/p/8899903.html
Copyright © 2011-2022 走看看