国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

實現觀察者模式(Observer Pattern)的2種方式

2019-11-17 01:45:04
字體:
來源:轉載
供稿:網友

實現觀察者模式(Observer Pattern)的2種方式

在觀察者模式中有2個要素:一個是被觀察對象,另一個是觀察者。但被觀察對象的狀態發生改變會通知觀察者。

舉例:把訂閱報紙的人看作是觀察者,把報紙看作被觀察對象。每當有新的新聞就要通知訂閱報紙的人。本篇分別用實現接口和使用委托事件的方式來實現。

□ 通過實現接口實現

觀察者接口,把接收到的新聞顯示出來。

    public interface IObserver
    {
        void Update(string news);
    }

被觀察對象接口,提供3個方法:注冊觀察者,取消觀察者,通知觀察者。

    public interface ISubject
    {
        void RegisteerObserver(IObserver o);
        void RemoveObserver(IObserver o);
        void NotifyObservers();
    }

被觀察對象實現類,維護著一個觀察者接口的集合,對觀察者的注冊和取消實際上是往這個集合添加或移除數據。

    public class NewsPublisher : ISubject
    {
        PRivate List<IObserver>  observers = new List<IObserver>();
        private List<string> newsList = new List<string>(); 
        public void RegisteerObserver(IObserver o)
        {
            observers.Add(o);
        }
        public void RemoveObserver(IObserver o)
        {
            observers.Remove(o);
        }
        public void NotifyObservers()
        {
            foreach (IObserver o in observers)
            {
                o.Update(newsList[newsList.Count - 1]);
            }
        }
        public void PublishNews(string news)
        {
            newsList.Add(news);
            NotifyObservers();
        }
    }   

另外,被觀察對象實現類還維護著一個string類型的新聞集合,每當發布新聞,就往這個集合里添加數據,并通知所有的注冊觀察者。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 平阳县| 灌云县| 大安市| 剑阁县| 科尔| 内丘县| 宜州市| 翼城县| 洛宁县| 大荔县| 濮阳市| 理塘县| 北安市| 兰西县| 澄迈县| 汝州市| 双牌县| 易门县| 定安县| 收藏| 南川市| 平顺县| 康保县| 民勤县| 溧阳市| 锡林郭勒盟| 甘洛县| 南靖县| 浦县| 石泉县| 化德县| 曲周县| 奎屯市| 阳高县| 辽阳县| 宝清县| 富阳市| 竹北市| 广汉市| 石柱| 宜都市|