設計模式之享元模式

2021-10-08 19:14:32 字數 954 閱讀 2144

享元是指乙個可復用的物件,通過復用這個享元來減少應用中的記憶體分配。

享元模式是為了減少記憶體占用,盡可能復用已有物件的設計模式,一般來說會把這個可復用的物件放到乙個外部的資料結構中,當需要使用到的時候傳給享元。

享元模式的意圖是復用物件,節省記憶體,前提是享元物件是不可變物件。

具體來講,當乙個系統中存在大量重複物件的時候,我們就可以利用享元模式,將物件設計成享元,在記憶體中只保留乙份例項,供多處**引用,這樣可以減少記憶體中物件的數量,以起到節省記憶體的目的。

實際上,不僅僅相同物件可以設計成享元,對於相似物件,我們也可以將這些物件中相同的部分(字段),提取出來設計成享元,讓這些大量相似物件引用這些享元。

public abstract class flyweight

public class concreteflyweight : flyweight

}public class unsharedflyweight : flyweight

}public class flyweightfactory

public class program

}

享元模式的**實現非常簡單,主要是通過工廠模式,在工廠類中,通過乙個 dictionary 或陣列等 來快取已經建立好的享元物件,以達到復用的目的 ,可以參考上面的示例。

來看一道經典的 c# 面試題目:

var a = "hello world";

var b = "hello world";

console.writeline(referenceequals(a, b));

想一下輸出結果是什麼,不確定的話可以試一下哈

clr 中 string 是乙個特殊的型別,string 有乙個字串池(intern) 的實現就屬於是享元模式的體現,這也是上面的輸出結果的原因,相同的字串變數值指向了同一塊記憶體位址

設計模式之享元模式

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

設計模式之 享元模式

享元模式英文稱為 flyweight pattern 又譯為羽量級模式或者蠅量級模式。享元模式的定義為 採用乙個共享類來避免大量擁有相同內容的 小類 的開銷。這種開銷中最常見 直觀的影響就是增加了記憶體的損耗。享元模式以共享的方式高效的支援大量的細粒度物件,減少其帶來的開銷。在名字和定義中都體現出了...

設計模式之享元模式

享元模式運用共享技術有效地支援大量細粒度的物件。如果乙個應用程式使用了大量的物件,而大量的這些物件造成了很大的儲存開銷時應該考慮使用。物件的大多數狀態可以是外部狀態,如果刪除物件的外部狀態,那麼可以用相對較少的共享物件取代很多組物件,此時也可以考慮用享元模式。享元模式uml圖如下 如下 使用者 cl...