定義物件間的一種一對多的依賴關係,當乙個物件的狀態發生改變時,所有依賴它的物件都得到通知並更新。觀察者模式又叫發布-訂閱模式,主要描述了一種目標與觀察者之間的相互關係。目標物件一旦發生變化,它所有的觀察者都得到通知並作出相應的更新操作。下圖恰好描述了這種場景,目標物件拿出煙,觀察者紛紛掏出火柴幫忙點菸。
目標類。提供刪除、新增觀察者的方法,當它的狀態發生變化時,向它的觀察者發出通知。
觀察者。為具體觀察者提供乙個統一的更新介面。
具體觀察者。實現更新介面,使自身狀態與目標一致。
當目標物件發生改變時,它將通知所有觀察者,觀察者得到通知後訪問目標物件更新狀態。
//目標類
public class subject
public void setstate(int state)
public void attach(observer observer)
}public void detach(observer observer)
}public void notify()
}}//觀察者
public abstract class observer
//具體觀察者a
public class concreteobservera : observer
public override void update()
");}
}//具體觀察者b
public class concreteobserverb : observer
public override void update()
");}
}//具體觀察者c
public class concreteobserverc : observer
public override void update()
");}
}//客戶端呼叫
class program
}
程式輸出
本節模擬開篇描述的場景,女演員(目標物件)拿出煙,男演員(觀察者)為其點菸。首先建立女演員類,包含乙個observer集合用來儲存觀察者,使用_state欄位模擬女演員狀態的變化,提供setstate以及getstate訪問該狀態,並提供attach和detach方法新增或刪除觀察者。
public class actress
public void setstate(int state)
public void notify()
}public void attach(observer observer)
}public void detach(observer observer)}}
建立觀察者,分別實現3個具體觀察者。
public abstract class observer
public class actora : observer
public override void lightcigarette()
}public class actorb : observer
public override void lightcigarette()
}public class actorc : observer
public override void lightcigarette()
}
客戶端呼叫
class program
}
程式輸出
設計模式 二十 觀察者模式
observer pattern 觀察者模式的別名包括發布 訂閱 publish subscribe 模式 模型 檢視 model view 模式 源 source listener 模式或從屬者 dependents 模式。觀察者模式是一種物件行為型模式。觀察者模式描述了如何建立物件與物件之間的依...
python 設計模式 觀察者 觀察者設計模式
在觀察者設計模式這種模式中,物件被表示為等待事件觸發的觀察者。一旦發生指定的事件,觀察者就會關注該主體。當事件發生時,主體告訴觀察者它已經發生。以下uml圖表示觀察者模式 如何實現觀察者模式?現在讓我們來看看如何實現觀察者模式。參考以下實現 import threading import time ...
設計模式 觀察者模式
觀察者模式定義了物件間一對多的依賴關係,乙個物件發生變化時,所有依賴它的物件都得到通知並被自動更新。本文主要闡述觀察者模式在分布式scada人機介面中的使用,利用這種模式使得人機介面顯示效率更高。發布者 郵局 觀察者 參與者 讀者 訂閱者 當郵局收到報社新雜誌的時候,即郵局狀態發生了改變,於是郵局把...