天天看點

結合項目執行個體 回顧傳統設計模式(二)觀察者模式

觀察者模式現在用的不是很多 重點看下它的設計思想 OK 下面繼續 消息中心的那點事

/// <summary>

    /// 資料中心

    /// </summary>

    public class MessageData

    {

        public void messageSend()

        {

            string title = observer.getTitle();

            string content = observer.getContent();

            //針對具體實作程式設計,會導緻我們以後再增加或者删除消息平台時 必須要重新維護Platformlist 有時甚至還要重構代碼

            foreach (Platform p in observer.Platformlist)

            {

                p.update(title, content);

            }

        }

    }

上述情況在soa體系架構中凸顯比較嚴重,基本上資料中心作為基站程式不适合版本經常更新

那麼這和一對多得關系有何關聯

利用觀察者模式,資料中心是具體狀态的對象,并且可以控制這些狀态。也就是說,有“一個”具有狀态的資料體。另一方面,觀察者模式使用這些狀态,雖然這些狀态不屬于他們。有許多的觀察者,依賴主題來告訴他們狀态合适改變了。這就産生了一個關系:“一個”資料中心對于“多個”消息釋出者的關系。

松耦合的威力:當兩個對象松耦合,他們依然可以互動,但是不清楚彼此的細節。觀察者模式提供了一種對象設計,讓主題和觀察者之間松耦合。

    public class MessageData : MessageDateIF

        private ArrayList observers;

        private string title;

        private string content;

        public MessageData()

            observers = new ArrayList();

        public void RegisterPlatform(observerIF o)

            observers.Add(o);

        public void RemovePlatform(observerIF o)

            int i = observers.IndexOf(o);

            if (i > 0) { observers.Remove(i); }

        public void NotifyPlatform()

            foreach (observerIF o in observers)

                o.update(title, content);

        public void MessageChanged(string title,string content)

            this.title = title;

            this.content = content;

            NotifyPlatform();

    public interface observerIF

        void update(string title, string content);

    public interface MessageDateIF

        void RegisterPlatform(observerIF o);

        void RemovePlatform(observerIF o);

        void NotifyPlatform();

    public interface DisplayElemnet

        void Display();

    public class PlatformA : observerIF, DisplayElemnet

        private MessageDateIF messagedata;

        public PlatformA(MessageDateIF messagedata)

            this.messagedata = messagedata;

        public void update(string title, string content)

            Display();

        public void Display()

            Console.WriteLine("title:" + title + " content:" + content);

總結:為了對象之間的松耦合而設計。觀察者模式定義了對象之間一對多依賴,這樣一來,當一個對象改變狀态時,它的所有一攔着都會收到通知并自動更新

本文轉自 熬夜的蟲子  51CTO部落格,原文連結:http://blog.51cto.com/dubing/712404

繼續閱讀