本文**使用的語言為c#,請使用別的語言的同學自行轉換為自己習慣的語言
什麼是觀察者模式?
簡單來說,就是一對多的通知,舉個例子:在保衛城堡類的遊戲中,如果城堡受到了攻擊,就會通知 兵營:出兵, 城牆: 公升級加固等等,這時的城堡就是被觀察者,而負責做出相應反應的就是觀察者。當被觀察者狀態發生改變的時候,通知觀察者進行相應的改變,這就是觀察者模式。
在設計的時候,為了降低觀察者與被觀察者之間的耦合度,兩者之間不能有類之間的互相呼叫,所以我們採用註冊-通知的形式來設計類。
今天,我以城堡受到攻擊為例,進行具體的觀察者模式的實現。
下面是單例**:
public class singletonwhere t : new()
public static t instance }}
return instance;}}
/// /// 初始化操作
///
public virtual void initialize()
}
二、設計城堡類,在這裡,外部物件(觀察者)通過繫結(註冊)主城的beattack事件來獲取主城狀態變化(事件基於委託,比委託更方便,不會的同學請提前學習)
public class maincity : singleton
//主城被攻擊要觸發的事件
public event action beattack;
public void damage(float damage)
}
三、這裡我們只設計乙個城牆和乙個兵營,來處理主城堡受到攻擊做出的反應,首先我們先規定好城牆和兵營必須做的事情,通過介面來規範這兩個類的行為
/// /// 定義觀察者必須要做的事情
///
public inte***ce iobserver
實現iobserver介面的城牆和兵營類:
/// /// 城牆
///
public class citywall : iobserver
public void protectmaincity()
public void warning()
/// /// 提公升城牆等級,最大為100級
///
/// 要提公升至多少級
public void upgradelevel(int level)
}
/// /// 兵營
///
public class barracks : iobserver
public void protectmaincity()
public void warning()
/// /// 派遣兵力
///
public void dispatch()
}
在這裡,我為了方便, 將註冊事件的語句直接寫到了建構函式當中,大家可以根據需求,自行決定何時何地註冊事件
四、最後,建立城牆和兵營物件,因為主城是單例,所以直接使用就好了。然後攻擊主城!這樣,乙個簡單的觀察者模式就完成了,如果需要新增新的觀察者只需要建立新的類物件,然後註冊事件就可以了,反之,如果想要刪除某個觀察者,則只需要登出事件就可以了,這時的城堡不需要做出任何改變!
public class attacker
}
五、結果:
一直都是看客,沒寫過,如有錯誤,還請各位多多指正,謝謝!
觀察者模式簡單總結
觀察者模式就是兩個類的使用 public inte ce observer public class observable就像我們平時寫監聽一樣,不過這次是把listener加入集合中使用。public class aa public void notifyobservers public inte...
觀察者模式的簡單demo
定義物件之間一對多的關係,當乙個物件狀態被更新時,所有依賴於它的物件都將被更新。觀察者模式有四種定義角色,分別為 抽象主題 subject 具體主題 concretesubject 抽象觀察者 observer 具體觀察者 concreteobserver 這種模式可以理解為 抽象主題中定義具體主題...
python觀察者模式 python 觀察者模式
python 觀察者模式 前言e 寫的倉促就不截uml類圖了,書本chapter10,p313能看到圖 一旦觀察的主題有更新,就會通知到觀察者們,下面的例子是最簡單的乙個觀察者範例,假設這是一群投機分子密切關注 軍 火 倉庫的產品與數量變動 class inventory def init self...