022 第26章 享元模式

2022-07-17 03:09:10 字數 1845 閱讀 2953

簡述:

享元模式:運用共享技術有效地支援大量細粒度的物件。

享元模式包括:享元工廠類、享元介面類、具體享元類

享元工廠類: 用來建立並管理享元介面類物件,它主要使用來確保合理地共享享元介面類,當使用者請求乙個享元介面類物件時,享元工廠類物件提供乙個已建立的例項或者建立乙個(不存在的話)

享元介面類:所有具體享元類的超類或介面,通過這個介面可以接受並作用於外部狀態。

具體享元類:指那些不需要共享的享元介面類的子類,因為享元介面類共享成為可能,但它並不強制共享。

享元模式:

1 #include 2 #include 3

using

namespace

std;45

//享元介面類

6class

cflyweight7;

1112

//具體享元類

13class cconcreteflyweight : public

cflyweight

1417

};18

19//

不需要共享的享元子類

20class cunsharedconcreteflyweight : public

cflyweight

2124

};25

26//

享元工廠類

27class

cflyweightfactory

2839

40 ~cflyweightfactory()

4150

51 ++ite;52}

5354

m_mapflyweights.clear();55}

5657 cflyweight* getflyweight(string szkey)

58};

5960

61int

main()

62

輸出結果:

例:**共享**

**如下:

1 #include 2 #include 3

using

namespace

std;45

//使用者類

6class

cuser713

14string getname()

15};

1617

//**基類(享元介面類)

18class

cwebsite19;

2324

//具體**類(具體享元類)

25class cconcretewebsite : public

cwebsite

2632

33virtual

void use(cuser* puser)

34};

3536

//**工廠類(享元工廠類)

37class

cwebsitefactory

3853 ++ite;54}

55m_mapwebsites.clear();56}

5758

//獲得**分類

59 cwebsite* getwebsitecategory(string

szkey)

6066

67//

獲得**分類總數

68int getwebsitecount()

69};

7071

72int

main()

73

《大話設計模式》讀書筆記 第26章 享元模式

1 享元模式 flyweight 運用共享技術有效地支援大量細粒度的物件。2 享元模式 flyweight 結構圖 3 內部狀態與外部狀態 在享元物件內部並且不會隨環境改變而改變的共享部分,可以稱為是享元物件的內部狀態,而隨環境改變而改變的 不可以共享的狀態就是外部狀態了。4 事實上,享元模式可以避...

《大話設計模式》 第26個 享元模式

享元模式目的是為了減少物件例項化的個數,已達到減少物件占用記憶體的目的。他建立物件是通過工廠建立的,在工廠類中建立物件時,會先判斷此物件是否已經存在,如果不存在則建立物件,如果存在則返回已經存在的物件,這是享元模式的核心部分。對於物件間的不同部分,則採用引數傳遞的方式將不同部分傳進類的處理函式。如下...

設計模式(享元模式)

享元模式是設計模式中少數幾個已提高系統效能為目的模式之一。它的核心思想是 如果系統存在多個 相同的物件,那麼只需要共享一分物件的拷貝,而不必為每一次使用都建立新的物件。當有物件被大量復用時,特別是重量級的物件復用可以使用享元模式來提高系統效能。其優點如下 1.可以節省重複建立物件的開銷,因為被享元模...