設計模式之享元模式

2021-09-08 12:07:59 字數 1503 閱讀 3824

享元模式是設計模式中少數幾個以提高系統效能為目的的設計模式。他的核心思想是:如果乙個系統中存在多個相同的物件,那麼只需共享乙份物件的拷貝,而不必為每一次使用都建立新的物件。

在享元模式中,由於需要構造和維護這些可以共享的物件,因此需要乙個工廠類用於維護和建立共享物件。

flyweight:抽象享元類

concreteflyweight:具體享元類

unsharedconcreteflyweight:非共享享元類

如果需要做一款撲克牌遊戲(不考慮大小王),撲克總共52張,我們平時可能考慮建立52個不同的物件即可。但是可以發現,這些撲克牌不就是分為四類(紅桃:heart;黑桃:spade;方塊:diamond;梅花:club),每類不同的就是牌面a-k。

用享元模式設計如下:

(1)列舉定義撲克型別

/**

* cardtype 撲克牌型別

* @author

yangkj */

public

enum

cardtype

(2)非共享享元類(這裡當然就是牌面)

/**

* cardbasic 撲克牌牌面

* @author

yangkj

*/public

class

cardbasic

public

void

setnumbber(string numbber)

public

cardbasic(string numbber)

public

cardbasic()

}

(3)抽象享元介面 及 具體享元類

/**

* card 抽象享元介面

* @author

yangkj

*/public

inte***ce

card

/*** cardentity 具體享元類

* @authoryangkj

*/class cardentity implements

card

public

cardentity(cardtype type)

}

(4)享元工廠類

/**

* cardfactory 享元工廠類

* @author

yangkj

*/public

class

cardfactory

else

}}

(5)測試類

public

static

void

main(string args)

(6)測試結果享元模式由於其共享的特性,可以用於」池「,如執行緒池、資料庫連線池

string類的設計也是享元模式,我們知道string內容是存放在常量池中

缺點

設計模式之享元模式

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

設計模式之 享元模式

享元模式英文稱為 flyweight pattern 又譯為羽量級模式或者蠅量級模式。享元模式的定義為 採用乙個共享類來避免大量擁有相同內容的 小類 的開銷。這種開銷中最常見 直觀的影響就是增加了記憶體的損耗。享元模式以共享的方式高效的支援大量的細粒度物件,減少其帶來的開銷。在名字和定義中都體現出了...

設計模式之享元模式

享元模式運用共享技術有效地支援大量細粒度的物件。如果乙個應用程式使用了大量的物件,而大量的這些物件造成了很大的儲存開銷時應該考慮使用。物件的大多數狀態可以是外部狀態,如果刪除物件的外部狀態,那麼可以用相對較少的共享物件取代很多組物件,此時也可以考慮用享元模式。享元模式uml圖如下 如下 使用者 cl...