觀察者模式現在用的不是很多 重點看下它的設計思想 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