簡單的觀察者模式

2021-08-29 09:57:03 字數 1853 閱讀 2789

本文**使用的語言為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...