結構型模式:享元模式
熱氣球七大結構型模式之六:享元模式。
簡介姓名 :享元模式
英文名 :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 運用共享技術有效地支援大量細粒度的物件。型別 結構型模式。適用情況 乙個應用程式有大量的物件。物件的大多數狀態都是外部的。如果刪除物件的外部狀態,可以和相對較少的共享物件取代很多組物件。應用程式不依賴物件的標識,即應用程式依賴於物件的抽象介面。概述...