C C 設計模式 十一 享元模式

2021-10-24 12:10:34 字數 1389 閱讀 4855

flyweight模式也叫享元模式,是構造型模式之一,它通過與其他類似物件共享資料來減小記憶體占用。

在物件導向系統的設計何實現中,建立物件是最為常見的操作。這裡面就有乙個問題:如果乙個應用程式使用了太多的物件,就會造成很大的儲存開銷。特別是對於大量輕量級(細粒度)的物件,比如在文件編輯器的設計過程中,我們如果為沒有字母建立一乙個對 象的話,系統可能會因為大量的物件而造成儲存開銷的浪費。例如-乙個字母「a」在文件**現了100000次,而實際上我們可以這一萬個字母 「a」共享-乙個物件,當然因為在不同的位置可能字母「a」有不同的顯示效果( 例如字型和大小等設定不同),在這種情況我們可以為將物件的狀態分為「外部狀態」和「內部狀態」,將可以被共享(不會變化)的狀態作為內部.狀態儲存在物件中,而外部物件(例如上面提到的字型、大小等)我們可以在適當的時候將外部物件最為引數傳遞給物件(例如在顯示的時候,將字型、大小等資訊傳遞給物件)。

抽象享元角色:

所有具體享元類的父類,規定一些需要實現的公共介面。

具體享元角色:

抽象享元角色的具體實現類,並實現了抽象享元角色規定的方法。

享元工廠角色:

負責建立和管理享元角色。

使用場景:是以共享的方式高效的支援大量的細粒度的物件。

#include using namespace std;

#include "string"

#include "map"

class person

string getname()

int getage()

int get***()

protected:

string name;

int age;

int ***; //1男 2女

};class teacher : public person

string getid()

void printt() }

//通過teacher的pool,來存放老師結點,在teache***ctory中建立老師、銷毀老師

設計模式十一之享元模式

2.模式的結構與實現 3.模式在開源軟體中的應用 在物件導向程式設計過程中,有時會面臨要建立大量相同或相似物件例項的問題。建立那麼多的物件將會耗費很多的系統資源,它是系統效能提高的乙個瓶頸。這些物件有很多相似的地方,如果能把它們相同的部分提取出來共享,則能節省大量的系統資源,這就是享元模式的產生背景...

設計模式之 十一 享元模式Flyweight

flyweight模式定義 避免大量擁有相同內容的小類的開銷 如耗費記憶體 使大家共享乙個類 元類 為什麼使用?物件導向語言的原則就是一切都是物件,但是如果真正使用起來,有時物件數可能顯得很龐大,比如,字處理軟體,如果以每個文字都作為乙個物件,幾千個字,物件數就是幾千,無疑耗費記憶體,那麼我們還是要...

設計模式(十一)之 Flyweight 享元

避免大量擁有相同內容的小類的開銷 如耗費記憶體 使大家共享乙個類 元類 物件導向語言的原則就是一切都是物件,但是如果真正使用起來,有時物件數可能顯得很龐 大,比如,字處理軟體,如果以每個文字都作為乙個物件,幾千個字,物件數就是幾千,無疑耗 費記憶體,那麼我們還是要 求同存異 找出這些物件群的共同點,...