推薦閱讀:在軟體開發中,當我們需要對某些物件重複建立,且最終只需要得到單一結果。如果使用一般思維,那我們將浪費很多記憶體空間,為此,我們引入享元模式。
所謂享元模式即共享物件,該模式利用先前建立的已有物件,通過某種規則去判斷當前所需物件是否可以利用原有物件做相應修改後得到想要的效果,如果可以,則只需要修改該物件的某些屬性以達到要求,否則,則建立新物件。享元模式(flyweight pattern)主要用於減少建立物件的數量,以減少記憶體占用和提高效能。
1、抽象享元(flyweight):它是所有具體享元類的抽象基類,為其子類規定出需要實現的公共介面;例如:在遊戲中敵人的生成,生成的敵人往往是不同的,生成的位置不同,顏色不通等。下面,我們假設生成的是同一種敵人,但是它的y座標不固定。2、具體享元(concrete flyweight):具體享元類實現了抽象享元類所規定的介面;
3、享元工廠(flyweightfactoiy):享元工廠類負責建立和管理享元物件。
命名空間享元模式中包含abenemy充當抽象享元,enemy類充當具體享元,factoyenemy工廠類充當享元工廠。本案例通過使用享元模式來實現敵人的生成。
下面使用**實現享元模式:
1.建立抽像享元abenemy
public abstract class
abenemy
public override string tostring()
顏色的敵人,位置在x為,y為"
, color, x, y);}
}
2.建立具體享元
public
class
enemy
:abenemy
}
3.建立乙個工廠,生成基於給定資訊的實體類的物件
public
class
factoyenemy
public enemy getenemy
(int num)
}
4.使用該工廠,通過傳遞顏色資訊來獲取實體類的物件
class
program
}
整合後的**:
using system;
using system.collections.generic;
using system.linq;
using system.text;
using system.threading.tasks;
namespace 享元模式
public override string tostring()
顏色的敵人,位置在x為,y為"
, color, x, y);}
}public
class
enemy
:abenemy }
public
class
factoyenemy
public enemy getenemy
(int num)
}class
program
}}
優點:
大大減少物件的建立,降低系統的記憶體,使效率提高。
缺點:
提高了系統的複雜度,需要分離出外部狀態和內部狀態,而且外部狀態具有固有化的性質,不應該隨著內部狀態的變化而變化,否則會造成系統的混亂。
使用場景:
1、乙個系統中有大量的物件;
2、這些物件耗費大量的記憶體;
3、這些物件中的狀態大部分都可以被外部化;
4、這些物件可以按照內部狀態分成很多的組,當把外部物件從物件中剔除時,每乙個組都可以僅用乙個物件代替;
5、軟體系統不依賴這些物件的身份。
c 設計模式(享元模式)
good 運用共享技術有效地支援大量細粒度的物件 對於c 來說就是共用乙個記憶體塊啦,物件指標指向同乙個地方 如果乙個應用程式使用了大量的物件,而這些物件造成了很大的儲存開銷就應該考慮使用。還有就是物件的大多數狀態可以外部狀態,如果刪除物件的外部狀態,那麼可以用較少的共享物件取代多組物件,此時可以考...
C 設計模式 享元模式
ifndef flyweight h define flyweight h include include 說明 當系統中細粒度物件數量太多時,會導致執行代價過高,帶來效能下降等問題。享元模式正是為解決這一類問題而誕生的。在享元模式中通常會出現工廠模式,需要建立乙個享元工廠來負責維護乙個享元池,用於...
c 設計模式 享元模式
二 uml類圖 三 例子 四 優缺點 五 使用場景 關注類和物件的組合。繼承的概念被用來組合介面和定義組合物件,從而獲得新功能。運用共享技術來有効地支援大量細粒度物件的復用。它通過共享已經存在的物件來大幅度減少需要建立的物件數量 避免大量相似類的開銷,從而提高系統資源的利用率。能夠大幅度地減少需要例...