設計模式(13) 享元模式

2021-10-18 07:35:09 字數 1412 閱讀 1803

概念:

享元模式(flyweight pattern)主要用於減少建立物件的數量,以減少記憶體占用和提高效能。這種型別的設計模式屬於結構型模式,它提供了減少物件數量從而改善應用所需的物件結構的方式。

主要解決:

在有大量物件時,有可能會造成記憶體溢位,我們把其中共同的部分抽象出來,如果有相同的業務請求,直接返回在記憶體中已有的物件,避免重新建立。

優點

相同物件只要儲存乙份,這降低了系統中物件的數量,從而降低了系統中細粒度物件給記憶體帶來的壓力。

缺點

為了使物件可以共享,需要將一些不能共享的狀態外部化,這將增加程式的複雜性。

讀取享元模式的外部狀態會使得執行時間稍微變長。

模式的結構

享元模式的主要角色有如下。

抽象享元角色(flyweight):是所有的具體享元類的基類,為具體享元規範需要實現的公共介面,非享元的外部狀態以引數的形式通過方法傳入。

具體享元(concrete flyweight)角色:實現抽象享元角色中所規定的介面。

享元工廠(flyweight factory)角色:負責建立和管理享元角色。當客戶物件請求乙個享元物件時,享元工廠檢查系統中是否存在符合要求的享元物件,如果存在則提供給客戶;如果不存在的話,則建立乙個新的享元物件。

例:角色類

using system;

public

class 中國坦克

}

享員工廠

using system;

using system.collections.generic;

public

class 中國工廠

else

return tanks;

}}

測試

using system;

class

program

}

測試

享元模式的應用場景

當系統中多處需要同一組資訊時,可以把這些資訊封裝到乙個物件中,然後對該物件進行快取,這樣,乙個物件就可以提供給多出需要使用的地方,避免大量同一物件的多次建立,降低大量記憶體空間的消耗。

享元模式其實是工廠方法模式的乙個改進機制,享元模式同樣要求建立乙個或一組物件,並且就是通過工廠方法模式生成物件的,只不過享元模式為工廠方法模式增加了快取這一功能。

設計模式------首頁

《設計模式13 享元模式

享元模式是乙個比較好理解的模式,簡單而言,就是共享元素的意思。那共享元素有什麼用?通常這個模式是與工廠模式一起使用。我們知道工廠模式是用於建立物件的,沒呼叫一次就會返回乙個物件。如果我們過多的呼叫呢?每次返回乙個新的物件會導致記憶體占用很多。有時候我們並不需要乙個新的物件,只要獲得之前所建立的物件。...

設計模式13 享元模式(flyweight)

在軟體系統採用純粹物件方案的問題在於大量細粒度的物件會很快充斥在系統中,從而帶來很高的執行時代價 主要指記憶體需求方面的代價。如何在避免大量細粒度物件問題的同時,讓外部客戶程式仍然能夠透明地使用物件導向的方式來進行操作?運用共享技術有效的支援大量細粒度的物件。設計模式 gof 我們定義字型類時會使用...

設計模式(享元模式)

享元模式是設計模式中少數幾個已提高系統效能為目的模式之一。它的核心思想是 如果系統存在多個 相同的物件,那麼只需要共享一分物件的拷貝,而不必為每一次使用都建立新的物件。當有物件被大量復用時,特別是重量級的物件復用可以使用享元模式來提高系統效能。其優點如下 1.可以節省重複建立物件的開銷,因為被享元模...