php設計模式之享元模式分析 星際爭霸遊戲案例

2022-10-03 18:12:12 字數 838 閱讀 7121

星際的戰鬥達到後面,地圖裡面的部隊很多,如果我們把每個兵的影象動畫和屬性值作為乙個物件的話,系統的記憶體裡會消耗極大。

我們在玩的時候會發現,因為星際裡面的種族只有三個,其實兵種只有幾十個。

雖然每個獨立的士兵剩餘的血不同,但是同一兵種的影象動畫是一樣的,即使不同的玩家,只是不同的顏色。比如每個人族的機槍兵。

而且大多數玩家只用到常用的一些兵種,很多時候不會製造所有的兵種。

待解決的問題:把把兵種的影象動畫共享。

思路:我們把每個兵種的影象動畫建模作為物件,放入記憶體共享。一旦有某個畫面用到這個兵種,只要把共享的影象動畫拿出來,更改顏色就可以了。

享元(flyweight)模式示例:

<?php //機槍兵享元

class marineflyweight

www.cppcns.com}

//享元工廠

class flyweightfactory

return $flyweights[$name];

} }//初始化享元工廠

$flyweightfactory = new flyweightfactory();

//當我們需要繪製乙個機槍兵的時候,同時傳遞乙個狀態陣列,裡面包含剩餘的血等等

$mar程式設計客棧ine = $flyweightfactory->getflyweight("marine");

$marine->drawmarine($status);

?>

用途總結:享元模式可以將需要共享的資源集中起來,統一管理,防止重複消耗。

實現總結:需要乙個享元工廠管理共享的資源,比如上面的flyweightfactory。把所有共享的資源的生產全部交給個享元工廠。

設計模式之享元模式 PHP實現

減少建立物件的數量,以減少記憶體占用和提高效能。這種型別的設計模式屬於結構型模式,它提供了減少物件數量從而改善應用所需的物件結構的方式。享元模式嘗試重用現有的同類物件,如果未找到匹配的物件,則建立新物件。在有大量物件時,有可能會造成記憶體溢位,我們把其中共同的部分抽象出來,如果有相同的業務請求,直接...

php 實現設計模式之 享元模式

class book public function gettitle public function getauthor class bookfactory public function getbook title return this books title class bookshelf ...

設計模式之享元模式

1 享元模式運用共享技術有效地支援大量細粒度的物件。uml圖如下 2 思考 flyweight根據客戶需求返回已經生成好的物件,但一定要事先生成物件例項嗎?答 實際上是不一定需要的,完全可以初始化的時候什麼也不做,到需要的時候,再去判斷物件是否為null來決定是否例項化。3 思考 為什麼要有unsh...