設計模式學習筆記(十二) Flyweight享元

2021-04-12 18:00:04 字數 1656 閱讀 5280

十一、flyweight

(享元)

情景舉例:

運用共享技術有效地支援大量細粒度的物件。

**示例:

/* flyweight

抽象類。其操作中的glyphcontext下文會介紹

*/

class glyph ;

/* flyweight

具體類。

*/

class character : public glyph ;

/* glyphcontext

是乙個外部狀態的儲存庫。它維持著實際字型與glygh類的映

* 射關係。在給定場景下,都會有乙個glyphcontext物件作為glygh類的引數。

*/

class glyphcontext ;

/*

主程式中只給出了創造給定場景下某個glyphcontext物件的方法。

*/

void dummy () 

/* 

抽象工廠。負責建立glygh並確保對它們進行合理共享。

*/

const int ncharcodes = 128;

class glyphfactory ;

/* 

建構函式中對共享池全部清0

*/

glyphfactory::glyphfactory () 

}

/* 

如果在共享池中找不到則建立乙個新的物件並放入共享池,反之則直接取出。

*/

character* glyphfactory::createcharacter (char c) 

return _character[c];

}

/* 

行與列無法共享。普通的抽象工廠模式

*/

row* glyphfactory::createrow () 

/*

*/

column* glyphfactory::createcolumn () 

個人理解:

個人覺得對享元模式的理解尚淺。該模式體現共享思想的類是乙個抽象工廠類,該類的實現確保了細粒度物件的合理共享。在例子中的

glyphcontext

類個人認為可能與模式本身無關,只是由

glygh

類操作的引數類,在這裡只是外部儲存了給定場景下的字型狀態。

設計模式 學習筆記 之十二

adapter模式是一種簡單的模式。當我們需要使用乙個現成的類,但它的介面又跟要求的介面有出入時,我們就使用adapter模式把這個現成的類適配到目標介面。我們下面來看乙個具體的例子。假設我們在開發乙個2維圖形程式。在這個程式中,需要乃至若干形狀類,如點 直線和矩形。為了給這些開關類建模,我們設計了...

設計模式學習筆記(二十二 備忘錄模式)

在不破壞封裝性的前提下,捕獲乙個物件的內部狀態,並在該物件之外儲存這個狀態,這樣以後就可以將該物件恢復到原先儲存的狀態。這就是備忘錄模式的定義。物件的狀態依賴於它的變數的取值情況,物件在程式執行期間的各個時刻可能具有不同的狀態。在某些應用中,程式可能需要使用一種合理的方式來儲存物件在某一時刻的狀態,...

設計模式學習之十二 模板方法模式

製作豆漿的流程,選材 新增配料 浸泡 豆漿機中打碎 通過不同的配料。可以製作不同口味的豆漿 選材。浸泡,和打碎這幾個步驟對於製作每種口味的豆漿都是一樣的 通過模板方法模式完成 模板方法模式 template method pattern 又叫模板模式。在乙個抽象類公開定義執行它的方法的模板。它的子類...