C#設計模式 - 觀察者模式(使用委託)

來源:互聯網
上載者:User

標籤:

1.概念

     觀察者模式(有時又被稱為發布-訂閱Subscribe>模式、模型-視圖View>模式、源-收聽者Listener>模式或從屬者模式)是軟體設計模式的一種。在此種模式中,一個目標物件管理所有相依於它的觀察者物件,並且在它本身的狀態改變時主動發出通知。這通常透過呼叫各觀察者所提供的方法來實現。此種模式通常被用來實現事件處理系統。

2.角色

      2.1 抽象主題(Subject):它把所有觀察者對象的引用儲存到一個聚集裡,每個主題都可以有任何數量的觀察者。抽象主題提供一個介面,可以增加和刪除觀察者對象。

  2.2 具體主題(ConcreteSubject):將有關狀態存入具體觀察者對象;在具體主題內部狀態改變時,給所有登記過的觀察者發出通知。

  2.3 抽象觀察者(Observer):為所有的具體觀察者定義一個介面,在得到主題通知時更新自己。

  2.4 具體觀察者(ConcreteObserver):實現抽象觀察者角色所要求的更新介面,以便使本身的狀態與主題狀態協調。

3.具體實現之委託實現。

  類比的情境:貓叫了,老鼠跑了、主人醒了。

     3.1 ISubject 抽象

    public delegate void NotifyHandler();
public abstract class ISubject { public event NotifyHandler NotifyEvent; protected void Notify() { if (NotifyEvent != null) NotifyEvent(); } public virtual void Run() { } }

     3.2 CatSubject

   public class CatSubject : ISubject    {        public override void Run()        {            Console.WriteLine("貓叫了...");            this.Notify();        }    }

      3.3 Observer

  public abstract class Observer    {        protected Observer(ISubject sub)        {            sub.NotifyEvent += Response;        }        public abstract void Response();    }

      3.4 MouseObserver

  public class MouseObserver : Observer    {        public MouseObserver(ISubject sub)            : base(sub)        {        }        public override void Response()        {            Console.WriteLine("老鼠跑了!");        }    }

      3.5 MasterObserver

public class Master2Observer : Observer    {        public Master2Observer(ISubject sub):base(sub)        {                    }        public override void Response()        {            Console.WriteLine("主人醒了....");        }    }

      3.6 調用

var sub = new CatSubject();var mouse = new MouseObserver(sub);var master = new Master2Observer(sub);sub.Run(); 

      3.7 結果

    

C#設計模式 - 觀察者模式(使用委託)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.