享元模式(Flyweight)

2021-09-11 03:36:42 字數 1684 閱讀 1039

1. 這個模式相對簡單。享元模式,就是在工廠中包含所要共享的元素例項,多個物件通過發給這個工廠所需要物件的標記,獲得同乙個例項,這樣多個物件的操作只需要乙個物件例項即可,看基礎**示例。

2.  內部狀態(共享物件)和外部狀態(個性化部分)(**示例見後面**第三版)

核心意思,是需要改變的內容部分,可以作為引數傳遞給方法,而物件本身依然是乙個。

3. 如果乙個應用程式使用了大量的物件,而大量的這些物件造成了很大的記憶體開銷時可以考慮使用享元模式

4. 物件的大多數狀態可以外部狀態,如果刪除物件的外部狀態,那麼可以用相對較少的共享物件取代很多組物件,此時可以考慮使用享元模式。

5. 享元模式節約記憶體開銷,減少物件例項化個數。

using system;

using system.collections.generic;

using system.collections;

using system.text;

namespace 享元模式

}class

flyweightfactory

public flyweight getflyweight(string key)

}abstract class

flyweight

class

concreteflyweight : flyweight

}class

unsharedconcreteflyweight : flyweight}}

**,第三版

namespace 享元模式

", f.getwebsitecount());

//string titlea = "大話設計模式";

//string titleb = "大話設計模式";

titleb));

console.read();}}

//使用者

public class

user

public string name}}

//**工廠

class

websitefactory

//獲得**分類總數

public int getwebsitecount()

}//**

abstract class

website

//具體的**

class

concretewebsite : website

public override void use(user user)}}

posted on

2009-12-13 19:26

...)

編輯收藏

FlyWeight 享元模式

include include include using namespace std class flyweight virtual flyweight m vector.clear class flyweightfactorya public flyweightfactory flyweight...

享元模式 Flyweight

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

享元模式 flyweight

flyweight是輕量級的意思,中文這邊翻譯成享元,更容易讓人理解一些。享元模式是為了應對大量細粒度物件重複的問題。程式中存在大量細粒度的物件,每次要使用時都必須建立乙個新的物件,既影響了執行效率又增加了記憶體消耗。於是有了享元模式,享元模式提取出這些細粒度物件中間公共的狀態 屬性,我的理解 只生...