《設計模式13 享元模式

2021-07-22 13:48:04 字數 1423 閱讀 5252

享元模式是乙個比較好理解的模式,簡單而言,就是共享元素的意思。

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

而享元模式就是這個作用:實現物件的共享,避免物件的過多建立。

下面用乙個例子來展示一下享元模式的基本寫法:

我們來模仿乙個搜尋的過程,即輸入關鍵字----獲得結果。

短時間內,如果某個人去搜尋乙個關鍵字,獲得了結果。當另乙個搜尋相同內容時,需要重新去查詢,10000個人同時去蒐時,就會建立10000個不同物件,但是它們的內容確是一樣的。這樣就非常浪費資源。

而通過享元模式則可以合理運用之前的資源。

首先建立乙個

isearch介面:

public inte***ce isearch

實現這個介面:

public class googlesearch implements isearch 

@override

public void searchthings()

public string getkeyword()

}

這是很簡單的重寫,通過建構函式傳入關鍵字來獲得結果。

現在實現乙個工廠類,而這個工廠類就是享元模式的核心。

這裡實現了兩個方法來體現出享元模式的作用:

public class searchcontentfactory 

//使用享元模式

private static arraylistlist = new arraylist<>();

public static isearch getresultbyflyweight(string keyword)

} googlesearch search = new googlesearch(keyword);

list.add(search);

return search;

}}

第一種是傳統方法,第二種是利用享元模式。其實就是

通過乙個集合去儲存資料,在下一次呼叫的時候先判斷是否存在,存在則直接返回,不存在再重建。

測試:這裡我通過列印hashcode來判斷是否是新建立的物件

public class flyweighttest 

}

結果:

1829164700

2018699554

1311053135

1311053135

結果顯而易見,不同享元模式獲得的都是乙個新的物件,而通過享元模式則很好的利用了之前的資源,避免了浪費。

設計模式(13) 享元模式

概念 享元模式 flyweight pattern 主要用於減少建立物件的數量,以減少記憶體占用和提高效能。這種型別的設計模式屬於結構型模式,它提供了減少物件數量從而改善應用所需的物件結構的方式。主要解決 在有大量物件時,有可能會造成記憶體溢位,我們把其中共同的部分抽象出來,如果有相同的業務請求,直...

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

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

設計模式(享元模式)

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