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

2021-09-21 13:01:56 字數 1893 閱讀 7733

結構型模式:享元模式

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

簡介姓名 :享元模式

英文名 :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;

org.springframework.boot

spring-boot-dependencies

2.0.8.release

pomimport

io.spring.platform

platform-bom

cairo-release

pomimport

org.springframework.cloud

spring-cloud-dependencies

finchley.sr2

pomimport

專案結構如下:

專案結構

授權認證中心搭建

授權認證中心本質就是乙個 spring boot應用,因此需要完成幾個大步驟:

pom中新增依賴

org.springframework.cloud

spring-cloud-starter-oauth2

結構型模式之享元模式

享元模式 享元模式結構 flyweight 抽象享元類 通常是乙個介面或抽象類,在抽象享元類中宣告了具體享元類公共的方法,這些方法可以向外界提供享元物件的內部資料 內部狀態 同時也可以通過這些方法設定外部資料 外部狀態 concreteflyweight 具體享元類 它實現了抽象享元類,其實例稱為享...

結構型模式之享元模式

在軟體系統中,有時候會存在資源浪費的情況,例如在計算機記憶體中儲存了多個完全相同或者非常相似的物件,如果這些物件的數量太多將導致系統執行代價過高,記憶體屬於計算機的 稀缺資源 不應該用來 隨便浪費 那麼是否存在一種技術可以用於節約記憶體使用空間,實現對這些相同或者相似物件的共享訪問呢?答案是肯定,這...

結構型模式之享元模式

定義 享元模式 flyweight pattern 運用共享技術有效地支援大量細粒度的物件。型別 結構型模式。適用情況 乙個應用程式有大量的物件。物件的大多數狀態都是外部的。如果刪除物件的外部狀態,可以和相對較少的共享物件取代很多組物件。應用程式不依賴物件的標識,即應用程式依賴於物件的抽象介面。概述...