享元模式 FlyWeight

2021-08-20 13:52:56 字數 1420 閱讀 4297

享元模式,運用共享技術有效地支援大量細粒度的物件。享元模式主要用於減少建立物件的數量,以減少記憶體占用和提高效能。這種型別的設計模式屬於結構型模式,它提供了減少物件數量從而改善應用所需的物件結構的方式。

小菜最近接了幾個小型外包專案,主要是給一些私營業主做**。事實上很多客戶都需要這樣的**,但要求不太一樣,有的人希望是新聞發布形式,有人希望是部落格形式。可是每個**租用乙個空間,費用上很難降低。萬能的大鳥今天來教他享元模式,幫他解決這一問題。

//**抽象類

abstract class website

//具體**類

class concretewebsite : website

public override void use(user user)

}

//使用者

public class user

public string name}}

//**工廠類

class websitefactory

//獲得**分類總數

public int getwebsitecount()

}

//客戶端

關係介紹

享元類(flyweight)是所有具體享元類(concreteflyweight)的介面,是其父類。享元工廠和享元類之間是聚合關係,享元類擁有享元工廠類。客戶端(client)既和具體享元類是關聯關係,也和享元工廠類是關聯關係。

flyweight(享元類):通過這個介面,享元類可以接受並作用於外部狀態。

concreteflyweight(具體享元類):是繼承享元類或實現享元類的介面,並為內部狀態增加儲存空間。

unsharedconcreteflyweight(不共享具體享元類):是指那些不需要共享的享元類子類。因為享元類介面共享成為可能,但它並不強制共享。

flyweightfactory(享元工廠):用來建立並管理享元類物件。

1.大大減少物件的建立,降低系統的記憶體,使效率提高。

1.如果乙個應用程式使用了大量的物件,而大量的這些物件造成了很大的儲存開銷時就應該考慮使用

2.物件的大多數狀態可以外部狀態,如果刪除物件的外部狀態,那麼可用相對較少的共享物件取代很多組物件

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