享元模式是構造型模式之一,它通過與其他類似物件共享資料來減少記憶體占用。
在物件導向系統的設計實現中,建立物件是最為常見的操作。這裡面就有乙個問題:如果乙個應用程式使用了太多的物件,就會造成很大的儲存開銷。特別是對於大量輕量級(細粒度)的物件,比如在文件編輯器的設計過程中,我們如果為每一字母建立乙個物件的話,系統可能會因為大量的物件而造成儲存開銷的浪費。例如乙個字母「a」在文件中出現了10000次,而實際上我們可以讓這一萬個字母「a」共享乙個物件,當然因為在不同的位置可能字母「a」有不同的顯示效果(例如字型和大小等設定不同),這種情況我們可以將物件的狀態分為「外部狀態」和「內部狀態」,將可以被共享(不會變化)的狀態作為內部狀態儲存在物件中,而外部物件(例如上面提到的字型、大小等)我們可以在適當的時候將外部物件作為引數傳遞給物件(例如在顯示的時候,將字型、大小等資訊傳遞給物件)。
抽象享元角色:所有具體享元類的父類,規定一些需要實現的公共介面;
具體享元角色:抽象享元角色的具體實現類,並實現了抽象享元角色規定的方法;
享元工廠角色:負責建立和管理享元角色。
適用於:是以共享的方式,高效的支援大量的細粒度的物件。
#include
#include
#incude
using
namespace
std;
class person
string getname()
int getage()
int get***()
private:
string name;
int age;
int ***;
};class teacher:public person
string getid()
void printt()
private:
string id;
}class teache***ctory
~teache***ctory()
}//通過teacher的pool,來存放老師結點,在teache***ctory中建立老師、銷毀老師
teacher *getteacher(string tid)
else
return tmp;
}private:
mapm_tpool;
};int main(void)
結構型模式之享元模式
享元模式 享元模式結構 flyweight 抽象享元類 通常是乙個介面或抽象類,在抽象享元類中宣告了具體享元類公共的方法,這些方法可以向外界提供享元物件的內部資料 內部狀態 同時也可以通過這些方法設定外部資料 外部狀態 concreteflyweight 具體享元類 它實現了抽象享元類,其實例稱為享...
結構型模式之享元模式
在軟體系統中,有時候會存在資源浪費的情況,例如在計算機記憶體中儲存了多個完全相同或者非常相似的物件,如果這些物件的數量太多將導致系統執行代價過高,記憶體屬於計算機的 稀缺資源 不應該用來 隨便浪費 那麼是否存在一種技術可以用於節約記憶體使用空間,實現對這些相同或者相似物件的共享訪問呢?答案是肯定,這...
結構型模式之享元模式
定義 享元模式 flyweight pattern 運用共享技術有效地支援大量細粒度的物件。型別 結構型模式。適用情況 乙個應用程式有大量的物件。物件的大多數狀態都是外部的。如果刪除物件的外部狀態,可以和相對較少的共享物件取代很多組物件。應用程式不依賴物件的標識,即應用程式依賴於物件的抽象介面。概述...