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

2021-07-24 10:36:29 字數 1539 閱讀 3615

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

**如下:

#include 

#include

#include

using

namespace

std;

class flyweight

virtual

void operation (int extrinsicstate) = 0;

};class concreteflyweight : public flyweight

};class unsharedconcreteflyweight :public flyweight

};class flyweightfactory

flyweight* getflyweight (string key)

private:

map flyweights;

};class user

string getname ()

private:

string name;

};class website

;class concretewebsite : public website

void use (user *user)

private:

string name;

};class websitefactory

int getwebsitecount ()

private:

map websites;

};int main(void)

執行結果如下:

concreteflyweight: 21

concreteflyweight: 20

concreteflyweight: 19

unsharedconcreteflyweight: 18

-----------------------

concretewebsite: noveluser: hb

concretewebsite: bolguser: zt

0x9ff8f28 0x9ff8f98

0x9ff8f28

20x804c6d6 0x804c6d6

實現享元模式的核心在websitefactory類,此類是乙個物件工廠生成類,在生成乙個物件時,它回去已經存在的物件集合websites中查詢,若找到了則直接返回,若沒有找到則new乙個新物件並返回。

希望以後可以遇到用享元模式的場景,碰見別人寫的**運用此模式的也能夠識別出來。

ps:**最後兩個相同的字串char *p1 = "world";

char *p2 = "world";列印出兩個字串的位址發現位址是一樣的,這也是享元模式的乙個應用。

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

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

大話設計模式 享元模式

享元模式可以避免大量非常相似類的開銷。在程式設計中,有時需要生成大量細粒度的類例項來表示資料。如果能發現這些例項除了幾個引數外基本上都是相同的,有時就能夠大幅度地減少需要例項化的類的數量。如果能把那些引數移到類例項的外面,在方法呼叫時將他們傳遞進來,就可以通過共享大幅度地減少單個例項的數目。所有具體...

《大話設計模式 享元模式》筆記

1 享元模式 flyweight 運用共享技術有效的支援大量細顆粒度的物件。2 享元模式結構圖 3 簡單 實現 flyweight類,它是所有享元類的超類或介面,通過這個介面,flyweight可以接受並作用於外部狀態。public abstract class flyweightconcretef...