遊戲系統之間的管理 中介者模式之C 版

2021-10-04 18:21:29 字數 2734 閱讀 8938

讓**散發芬芳?

總結現在假設要做一款遊戲,而我們要負責的部分呢,就是生產系統、財務系統、人口管理系統(當成是乙個女朋友生成遊戲吧?,生成乙個女朋友需要扣除現有金錢,人口還需要增加1或者2?)

首先,我們來把這三個系統用普通的寫法來實現一下

這裡就假設一下,初始存款為100k(鉅額哈哈哈哈)。

public

class

financialsystem

// 消費

public

bool

consume

(int cost)

return

false;}

}

因為生產女朋友的話,說明你還單身嘛,所以初始人口為1(當然了,你也可以不為1的時候去生產咯?,只要你應付得來)。

public

class

populationsystem

// 增加人口

public

bool

addpopulation

(int populationcost)

return

false;}

}

生產系統通過詢問(呼叫)財務系統和人口管理系統,是否有足夠的資源(錢和人口)來進行女朋友的生產,如果有的話,就進行生產。

這裡假設生產乙個女朋友的花費為10k(對於100k來說,只用了十分之一,還是負擔得起的,人口花費為1(其實也有可能不為1的,哈哈哈))

public

class

manufacturingsystem

// 生產女朋友

public

void

producegrilfriend()

}}

在這裡如果讀者看過或者了解過設計的模式的話,那麼就會知道,生產系統這裡的**有壞味道了。為什麼?因為生產系統與財務和人口管理系統高度耦合了(在這裡,生產系統對其他系統的呼叫,是通過建構函式來傳參,並用變數儲存下來,然後再進行呼叫)。

如果財務系統和人口管理系統進行了公升級或者呼叫對應的api變更了(比如函式名變更了),那麼這個生產系統,也需要跟著變更,但實際生產的邏輯可能並沒有改變。

有的讀者可能會想,那我們使用面向介面程式設計的思想,將對應的財務系統和人口管理系統都抽象為介面的形式來改造可以嗎?emm,這的確可以降低耦合,但是,我們這裡只展示了生產系統對財務和人口管理系統的呼叫,但實際的遊戲或者乙個實際的系統,可能會存在多個系統之間的相互呼叫,如果使用介面,仍然無法解決系統間互相呼叫的混亂。比如像下圖所示的。為了顯示呼叫的混亂,所以,畫的也比較混亂。比如系統1需要呼叫系統4和5,則需要管理系統4和5,如此類推。

這個時候,中介者模式就該上場了。

為了減少系統之間的相互依賴,我們可以使用乙個中介者來負責對不同系統直接的呼叫。

先上圖。

這裡看圖都感覺要比之前清晰多了。

這裡主要變化的是生產系統和多了乙個中介者,財務系統和人口管理系統沒有變化,所以就不再重複展示了。

通過中介者,可以對財務系統和人口管理系統進行封裝,這樣,生產系統就可以不需要知道實現該功能的其他系統,只需要對中介者中暴露出來api進行使用就可以了。

public

class

mediator

public

bool

checkenoughmoney

(int cost)

public

bool

checkenoughpopulation

(int populationcost)

public

bool

paymoney

(int cost)

public

bool

addpopulation

(int population)

}

生產系統不再通過呼叫財務系統和人口管理系統了,而是直接通過中介者暴露出來的api進行呼叫,完全不需要知道實際到底用到了哪些系統。

public

class

manufacturingsystem

public

void

producegrilfriend()

}}

其實呢,這裡還可以將財務系統和人口管理系統抽象成介面,進一步減少依賴,甚至,中介者本身也可以抽象成介面的形式。

如果系統很多怎麼辦?那就可以通過增加中介者來對不同的系統進行分類。

比如系統1、2、3同屬一種型別的系統,系統4、5、6屬於另外一種型別的,那就可以用兩個中介者,來進行劃分,而呼叫,就在中介者和中介者之間,各個系統,仍然不需要知道其他系統的存在,只需要知道自己歸屬的那個中介者就可以了。

其實這個中介者模式,跟快遞的物流系統很類似。比如你的快遞從北京市***區運往廣州市***區,那麼肯定是先從北京運到廣州某個總的倉庫,然後再根據區進行運送,這裡廣州的某個總的倉庫,就可以模擬成是中介者,北京市和廣州市,就可以模擬成是子系統。

中介者模式適用於多子系統互相進行呼叫和依賴的系統中,在子系統特別多的情況下,也有可能會造成中介者的臃腫(比如乙個中介者負責的指責太多),這個時候就需要考慮將不同的系統劃分給不同的中介者來解決這個問題。

行為模式之Mediator 中介者

mediator定義 用乙個中介物件來封裝 一系列關於物件互動行為.為何使用mediator?各個物件之間的互動操作非常多 每個物件的行為操作都依賴彼此對方,修改乙個物件的行 為,同時會涉及到修改很多其他物件的行為,如果使用mediator模式,可以使各個物件間的耦合鬆散,只需關心和 mediato...

設計模式之Mediator 中介者

mediator中介者模式定義 用乙個中介物件來封裝一系列關於物件互動行為.為何使用mediator?各個物件之間的互動操作非常多 每個物件的行為操作都依賴彼此對方,修改乙個物件的行為,同時會涉及到修改很多其他物件的行為,如果使用mediator模式,可以使各個物件間的耦合鬆散,只需關心和 medi...

設計模式之Mediator 中介者

mediator中介者模式定義 用乙個中介物件來封裝一系列關於物件互動行為.為何使用mediator?各個物件之間的互動操作非常多 每個物件的行為操作都依賴彼此對方,修改乙個物件的行為,同時會涉及到修改很多其他物件的行為,如果使用mediator模式,可以使各個物件間的耦合鬆散,只需關心和 medi...