設計模式之享元模式 來點高效省記憶體的!

2021-10-03 03:57:50 字數 1382 閱讀 8867

四、享元模式的示例

五、享元模式的優缺點

享元模式屬於結構型模式,主要用於減少建立物件的數量,以減少記憶體占用和提高效能。

享元模式嘗試復用現有的物件例項,如果有就復用,沒有再建立,從而達到減少記憶體占用和提高效能的目的。

1、需要以共享的方式,高效的支援大量的細粒度的物件時可以使用享元模式。

2、需要使用緩衝池技術時可以使用享元模式。

所有具體享元的父類,給具體享元提供統一的公共介面。

抽象享元的具體實現類,實現抽象享元的規定的方法和行為。

負責建立和管理所有的享元物件。

// flyweightpattern.cpp : 此檔案包含 "main" 函式。程式執行將在此處開始並結束。

//#include

#include

#include

#define delete_ptr(p) }

using

namespace std;

// 享元抽象類

class

person

string getname()

intgetage()

string get***()

protected

: string m_name;

int m_age;

string m_***;};

// 享元具體類

class

employee

:public person

intgetid()

void

printinfo()

private

:int m_id;};

// 享元工廠類

class

employeefactory

~employeefactory()

m_employeemap.

clear()

;}employee *

getemployee

(int id)

else

return pemployee;

}private

: map<

int, employee*

> m_employeemap;};

intmain()

執行結果:

1、可以大大減少物件的建立,降低系統的記憶體占用,從而提高效率和系統效能。

1、提高了系統的複雜度,需要剝離出系統的外部狀態和內部狀態,而且外部狀態具有固有化的性質,不應該隨著內部狀態的變化而變化,否則會造成系統的混亂。

能力有限,如有錯誤,多多指教。。。

設計模式之享元模式

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

設計模式之 享元模式

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

設計模式之享元模式

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