我與C 設計模式(九) 享元模式

2021-06-26 02:35:16 字數 1396 閱讀 5241

享元模式,flyweight,在物件導向設計中,建立物件是極為正常的事情了,然而,當我們到處建立物件還是在建立同一種型別的物件或者同一種抽象型別的物件時,顯得好低效,浪費記憶體。比如,當一篇文章,每個字元都是乙個物件,字母a肯定出現了很多遍,如果每次都要建立乙個物件,工作量就很大了,試想,如果我們共享同乙個物件「a」,只是在不同的地方顯示不同的字型、顏色等,設計時將物件a分為內部和外部兩種狀態,對於共享的部分設為內建,不共享的部分設為外接,那麼事情會變得很省勁兒。這個方法就是享元的思想。

uml圖:

從上圖能看到有乙個工廠flyweightfactory在裡面,當client需要乙個物件,比方說a,就可以想flyweightfactory傳送乙個請求getflyweight(),flyweight擁有乙個管理、儲存物件的倉庫,或者成為物件池,可以用vector或hash表實現,getflyweight會遍歷物件池中的物件,如果已經存在a就直接返回給client,否則,建立乙個物件返回給client,最右邊部分是不想被共享的物件,本模式暫不講解。flyweight是享元類介面,內建部分的資訊包含在這個類裡面,concreteflyweight是具體實現部分,外接部分在其中。

**:

#ifndef _flyweight_h__

#define _flyweight_h__

#include #include using namespace std;

class flyweight

;class concrete_flyweight:public flyweight

;class flyweight_factory

;#endif

#include "flyweight.h"

#include #include #include #include using namespace std;

flyweight::flyweight(string intrinsic_state)

flyweight::~flyweight()

void flyweight::operation(const string &extrinsic_state)

string flyweight::get_intrinsic_state()

concrete_flyweight::concrete_flyweight(string intrinsic_state)

:flyweight(intrinsic_state)

g++ -o flyweight main.cpp flyweight.cpp

千萬要分清gcc還是g++,不然,除bug你會很頭疼。

java設計模式(九) 享元模式

享元模式 flyweight pattern 主要用於減少建立物件的數量,以減少記憶體占用和提高效能。這種型別的設計模式屬於結構型模式,它提供了減少物件數量從而改善應用所需的物件結構的方式 1 如果乙個系統中存在大量的相同或者相似的物件,由於這類物件的大量使用,會造成系統記憶體的耗費,可以使用享元模...

c 設計模式(享元模式)

good 運用共享技術有效地支援大量細粒度的物件 對於c 來說就是共用乙個記憶體塊啦,物件指標指向同乙個地方 如果乙個應用程式使用了大量的物件,而這些物件造成了很大的儲存開銷就應該考慮使用。還有就是物件的大多數狀態可以外部狀態,如果刪除物件的外部狀態,那麼可以用較少的共享物件取代多組物件,此時可以考...

C 設計模式 享元模式

ifndef flyweight h define flyweight h include include 說明 當系統中細粒度物件數量太多時,會導致執行代價過高,帶來效能下降等問題。享元模式正是為解決這一類問題而誕生的。在享元模式中通常會出現工廠模式,需要建立乙個享元工廠來負責維護乙個享元池,用於...