• 觀察者模式


    觀察者模式實際上就是發布訂閱模式.即可以進行推操作與拉操作.比如SQL Server或IBM MQ Sphere的發布訂閱方式.

    對於推操作,就是對於訂閱者,由系統一些性推給訂閱者.一般是不分好壞,全都發. 對於基礎數據的發布操作使用這個操作是相當好的.

    對於拉操作,就是被訂閱者通過一個接口,把訂閱的資料上在上面,而由訂閱者自行拉到.

    例子1:

    下面事例使用推操作方式操作得到.

    //“观察者”接口
    public interface IObserver {
    void Notify(object anObject);
    }


    //“被观察对象”接口
    public interface IObservable {
    void Register(IObserver anObserver);
    void UnRegister(IObserver anObserver);
    }
     

    //所有被观察对象的基类
    public class ObservableImpl : IObservable {

    //保存观察对象的容器
    protected Hashtable _observerContainer = new Hashtable();

    //注册观察者
    public void Register(IObserver anObserver){
    _observerContainer.Add(anObserver,anObserver); 
    }


    //撤销注册
    public void UnRegister(IObserver anObserver){
    _observerContainer.Remove(anObserver); 
    }


    //将事件通知观察者
    public void NotifyObservers(object anObject) 
    //枚举容器中的观察者,将事件一一通知给他们
    foreach(IObserver anObserver in _observerContainer.Keys) 
    anObserver.Notify(anObject); 
    }

    }

    }
     

    //业务数据(被观察对象)
    public class SomeData : ObservableImpl {
    //被观察者中的数据
    float _askPrice;

    //改变数据的属性
    public float AskPrice {
    set {
    _askPrice 
    = value;
    base.NotifyObservers(_askPrice);//将改变的消息通知观察者
    }

    }

    }
     
    //用户界面(观察者)
    public class SomeKindOfUI : IObserver {
    public void Notify(object anObject)
    Console.WriteLine(
    "The new ask price is:" + anObject); 
    }

    }


    //实际调用的过程
    public class MainClass{
    public static void Main() {
    //创建观察者和被观察者
    SomeKindOfUI ui = new SomeKindOfUI();
    SomeData data 
    = new SomeData();

    //在被观察对象中注册观察者
    data.Register(ui);

    //改变被观察对象中的数据,这时被观察者会通知观察者
    data.AskPrice = 1000f;

    //注销观察者,停止观察
    stock.UnRegister(stockDisplay);
    }

    }

  • 相关阅读:
    SpringCloudAlibaba学习笔记-简介
    SpringCloudAlibaba学习笔记-目录
    go语言学习笔记-目录
    go语言学习笔记-配置idea开发go编程语言并配置导入本地包
    go语言学习笔记-Windows10开发环境安装和环境变量配置
    我与阿里云的日常-QuickBI开发教程
    我与阿里云的日常-阿里云帐号注册
    消息队列 RabbitMq(6)高级特性
    消息队列 (5) RabbtMQ SpringBoot整合
    Nginx的安装和使用
  • 原文地址:https://www.cnblogs.com/tongtkk/p/959871.html
Copyright © 2020-2023  润新知