結構型模式 享元模式

2021-09-21 12:55:35 字數 2239 閱讀 8719

七大結構型模式之六:享元模式。

姓名:享元模式

英文名:flyweight pattern

價值觀:共享富貴

個人介紹

use sharing to support large numbers of fine-grained objects efficiently.

使用共享物件可有效地支援大量的細粒度的物件。

(來自《設計模式之禪》)

還記得筆袋麼?可能有人已經忘記了,在寫這篇文章之前其實我也忘了,從初中開始就再也沒用過筆袋。拿筆袋來講享元模式再適合不過了。筆袋放各種各樣的筆,今天我們不講別的,就講蠟筆。前段時間在逛公園的時候,看到一位老師在畫畫,畫的就是蠟筆畫,第一次看到真正的蠟筆畫,真的很震撼,原來蠟筆也可以把景色畫得那麼美。當時偷**了一張,看下圖。

我們就拿這幅畫來說,裡面畫了草、樹、路、山、天空等等。如果沒有用享元模式,我們可能這樣子實現。

蠟筆介面。

inte***ce icrayon
蠟筆。

/**

* 蠟筆

*/class crayon implements icrayon

@override

public void draw(string place)

}

測試**。這幅畫是小明和小紅一起畫,小明畫了草和路,小紅畫了樹和藍天。

public class noflyweighttest 

public static void drawbyxiaoming()

public static void drawbyxiaohong()

}列印結果:

---新建【綠色】蠟筆

用綠色蠟筆畫草

---新建【灰色】蠟筆

用灰色蠟筆畫路

---新建【藍色】蠟筆

用藍色蠟筆畫藍天

---新建【綠色】蠟筆

用綠色蠟筆畫樹

我們發現小明和小紅都用了綠色蠟筆,而這裡新建了 2 次綠色蠟筆,也就是在整個作畫過程中,小明和小紅並不是共用一套蠟筆,而是各自用一套蠟筆,在現實中是沒什麼問題的,但是在軟體開發中,如果這種情況出現,其實相當於資源浪費,因為每個蠟筆都會占用記憶體,可以共用的我們盡量共用,節省一些記憶體空間,特別是出現很多這種可以共享卻沒有共享的物件時候。下面我們引入享元模式。享元模式實現方法相當於我們蠟筆都放在了筆袋,小明和小紅用完就放到筆袋裡面,每一種顏色的蠟筆只有一根,也就是他們共用一套蠟筆。**如下所示。

筆袋**。我們用了 map 作為容器,如果容器裡面沒有想要顏色的蠟筆,則建立新的蠟筆,並存到容器裡。

/**

* 筆袋

*/class crayonfactory

icrayon crayon = new crayon(color);

data.put(color, crayon);

return crayon;}}

測試**。

public class flyweighttest 

public static void drawbyxiaoming()

public static void drawbyxiaohong()

}列印結果:

---新建【綠色】蠟筆

用綠色蠟筆畫草

---新建【灰色】蠟筆

用灰色蠟筆畫路

---新建【藍色】蠟筆

用藍色蠟筆畫藍天

用綠色蠟筆畫樹

利用享元模式實現的結果,小紅畫樹所用到的綠色蠟筆跟小明畫草的綠色蠟筆一樣,小紅用到時並沒有新建綠色蠟筆。

推薦閱讀

結構型模式:外觀模式

結構型模式:裝飾模式

結構型模式:組合模式

結構型模式 享元模式

文章首發 結構型模式 享元模式 七大結構型模式之六 享元模式。姓名 享元模式 英文名 flyweight pattern 價值觀 共享富貴 個人介紹 use sharing to support large numbers of fine grained objects efficiently.使用...

結構型模式 享元模式

總結解決實際問題 享元模式 棋子 program ade someproblem author cade franklin create 2020 01 06 06 08 public inte ce chess 五子棋棋子 program ade someproblem author cade f...

結構型模式 享元模式

文章首發 結構型模式 享元模式 七大結構型模式之六 享元模式。姓名 享元模式 英文名 flyweight pattern 價值觀 共享富貴 個人介紹 use sharing to support large numbers of fine grained objects efficiently.使用...