C 設計模式之享元模式

2021-08-20 13:53:59 字數 1336 閱讀 3520

英文:flyweight

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

拿書上的例子來說,如果100家企業來找你做**,難道要去申請100個空間,用100個資料庫來貼上100遍同樣的**嗎?肯定不可以,**增多,例項也隨著增多,這對伺服器的資源浪費的很嚴重。

如果大家的**共享一套**,只要使用者id不同,可以區分不同的客戶,具體資料和模板也可以不同,但**核心和資料庫卻可以是共享的,那不僅是減少了伺服器資源的浪費,也很容易去維護和擴充套件了。

如果乙個應用程式使用了大量的物件,而大量這些物件造成了很大的儲存開銷時就應該考慮使用;還有就是物件的大多數狀態可以外部狀態,如果刪除物件的外部狀態,那麼可以用相對較少的共享物件取代很多組物件,此時可以考慮使用享元模式。

在享元物件內部並且不會隨環境改變而改變的共享部分,可以稱為是享元物件的內部狀態,而隨環境改變而改變的,不可以共享的狀態就是外部狀態了。

享元模式可以避免大量非常相似類的開銷。

內部狀態儲存於concreteflyweight中,而外部物件則應該考慮由客戶端物件儲存或計算。當呼叫享元物件的操作時,將該狀態傳遞給它。

下面例子中的客戶賬號就是外部狀態,應該由專門的物件來處理。

//使用者類,是**類的外部狀態

public

class user

public

string name}}

//**抽象類

abstract

class

website

//具體**類

class concretewebsite:website

public

override

void

use(user user)

}

//**工廠

class websitefactory

//獲得**分類總數

public

intgetwebsitecount()

}

客戶端**:

class

program

",f.getwebsitecount ());

console.read();}}

記錄每一次成長~

c 設計模式之享元模式

享元模式 定義 享元模式 flyweight 運用共享技術有效的支援大量細粒度 的物件。享元模式結構圖 兌現 include include include map using namespace std class person virtual void print 0 protected str...

c 設計模式之享元模式

享元模式運用共享技術有效地支援大量細粒度的物件。在享元物件內部並且不會隨環境改變而改變的共享部分,稱為享元物件的內部狀態,而隨環境改變而改變 不可以共享的狀態就是外部狀態。在享元模式 flyweight 內部狀態儲存於物件之中,而外部狀態則應該考慮由客戶端物件儲存或計算,再呼叫該物件的時候,將對應的...

C 設計模式之享元模式

下面有兩篇部落格,作為參考。設計模式本來就是一種思想,光看抽象的設計模式 可以搜尋到很多c 設計模式之享元模式的抽象 很難理解,上面兩篇例子給出來的不錯。結合我的理解說幾點我的思考 1 享元模式是一種結構型的設計模式,甚至可以說是就是包含了乙個factory模式,factory產出的product是...