設計模式(二十) 觀察者模式

2022-01-15 23:09:56 字數 2084 閱讀 7348

定義物件間的一種一對多的依賴關係,當乙個物件的狀態發生改變時,所有依賴它的物件都得到通知並更新。

觀察者模式又叫發布-訂閱模式,主要描述了一種目標與觀察者之間的相互關係。目標物件一旦發生變化,它所有的觀察者都得到通知並作出相應的更新操作。下圖恰好描述了這種場景,目標物件拿出煙,觀察者紛紛掏出火柴幫忙點菸。

目標類。提供刪除、新增觀察者的方法,當它的狀態發生變化時,向它的觀察者發出通知。

觀察者。為具體觀察者提供乙個統一的更新介面。

具體觀察者。實現更新介面,使自身狀態與目標一致。

當目標物件發生改變時,它將通知所有觀察者,觀察者得到通知後訪問目標物件更新狀態。

//目標類

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人機介面中的使用,利用這種模式使得人機介面顯示效率更高。發布者 郵局 觀察者 參與者 讀者 訂閱者 當郵局收到報社新雜誌的時候,即郵局狀態發生了改變,於是郵局把...