英文: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是...