自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

常用設(shè)計模式系列之——享元模式

開發(fā) 架構(gòu)
簡單點描述一下就是一批對象中既有相同的內(nèi)容也有不同的內(nèi)容,相同的內(nèi)容采用共享的方式,不同的內(nèi)容通過動態(tài)傳遞的方式,來盡量減少對象的產(chǎn)生。這里需要理解的一點是,這多個對象其實底層對應(yīng)的是同一個對象,物理地址是一個。

[[327371]]

 Hello 大家好,我是鴨血粉絲,今天周六,你是在休息學(xué)習(xí)還是在加班呢?

今天阿粉要跟大家分享的是結(jié)構(gòu)型模式之享元模式,既然享元模式是屬于結(jié)構(gòu)性模式中的一種,那自然是用來組織代碼,調(diào)整相應(yīng)的代碼結(jié)構(gòu)來達(dá)到效果的,下面我們一起來看一下吧。

[[327372]]

享元模式

首先常規(guī)操作,我們先看一下什么是享元模式,維基百科解釋:享元模式(英語:Flyweight Pattern)是一種軟件設(shè)計模式。它使用共享物件,用來盡可能減少內(nèi)存使用量以及分享資訊給盡可能多的相似物件;它適合用于當(dāng)大量物件只是重復(fù)因而導(dǎo)致無法令人接受的使用大量內(nèi)存。通常物件中的部分狀態(tài)是可以分享。常見做法是把它們放在外部數(shù)據(jù)結(jié)構(gòu),當(dāng)需要使用時再將它們傳遞給享元。

關(guān)鍵字:減少內(nèi)存,共享物件,外部數(shù)據(jù)

簡單點描述一下就是一批對象中既有相同的內(nèi)容也有不同的內(nèi)容,相同的內(nèi)容采用共享的方式,不同的內(nèi)容通過動態(tài)傳遞的方式,來盡量減少對象的產(chǎn)生。這里需要理解的一點是,這多個對象其實底層對應(yīng)的是同一個對象,物理地址是一個。

享元模式使用場景

享元模式的使用場景還是比較多的,最常見的一個場景就是 Java JDK 里面的 String 字符串類,因為 JVM 中有常量池,常量池的實現(xiàn)就是一種享元模式,避免多個相同對象的存在。另外線程池以及很多用到緩沖池的地方都采用了享元模式,比如 Integer 類中默認(rèn)緩存了-128 -127 之間的整數(shù),等等場景。

在演示享元模式之前,我們要先了解享元模式中涉及到的幾個角色名稱

  1. 抽象享元類:通常是一個接口,主要對外提供修改內(nèi)部數(shù)據(jù)的接口
  2. 具體享元類:享元的實現(xiàn)類,通常存儲在內(nèi)存中,便于使用
  3. 享元工廠類:對外創(chuàng)建具體享元類

下面我們通過一個簡單的示例來演示一下享元模式,我們創(chuàng)建一個接口類,然后寫一個實現(xiàn)類,再通過一個工廠來創(chuàng)建享元類,相關(guān)代碼如下:

UML 圖解

代碼演示

我們先創(chuàng)建一個接口類 IFlyweight.java,里面包含一個設(shè)置寬度的方法,如下

然后編寫一個實現(xiàn)類 FlyweightImpl.java 來實現(xiàn)接口,并且在構(gòu)造函數(shù)中傳遞一個 Color 對象

第三步我們再編寫一個工廠類 FlyweightFactory.java,里面有一個 Color 對象的本地緩存,對于相同的顏色只保存一個對象。

顏色輔助類 Color.java

最后寫一個測試應(yīng)用類 FlyweightDemo.java

上面測試類中,我們分別定義了兩種顏色的三個對象,由于相同顏色的對象已經(jīng)被緩存了,所以我們輸出的結(jié)果如下:

輸出結(jié)果

“從上面的運行結(jié)果中,我們可以看出,flyweight0 與flyweight1 其實是同一個對象,雖然他們的 width 和 height 屬性值不一樣,但是他們的底層對應(yīng)的是同一個對象本身。這就是享元模式的核心內(nèi)容,通過共享變量,來減少對象的產(chǎn)生,從而減少內(nèi)存的使用。

總結(jié)

今天跟大家分享了一下設(shè)計模式中的結(jié)構(gòu)型模式之享元模式,享元模式在我們?nèi)粘J褂玫目蚣芎徒M件都有很廣泛的應(yīng)用,希望通過這篇文章能夠幫助大家加深或者理解享元模式,歡迎大家一起討論交流,談?wù)勀闼赖倪€有哪些框架和組件中使用到了享元模式。

 

責(zé)任編輯:武曉燕 來源: Java極客技術(shù)
相關(guān)推薦

2024-02-27 11:59:12

享元模式對象

2012-01-13 15:59:07

2021-06-09 08:53:34

設(shè)計模式策略模式工廠模式

2021-06-22 15:27:13

設(shè)計模式迭代器模式Java

2021-01-21 05:34:14

設(shè)計模式建造者

2021-03-05 07:57:41

設(shè)計模式橋接

2023-03-06 08:46:12

2021-02-18 08:39:28

設(shè)計模式場景

2021-07-08 11:28:43

觀察者模式設(shè)計

2024-04-12 12:10:18

Python設(shè)計模式開發(fā)

2020-10-23 09:40:26

設(shè)計模式

2020-11-03 13:05:18

命令模式

2020-11-04 08:54:54

狀態(tài)模式

2022-01-12 13:33:25

工廠模式設(shè)計

2021-04-19 21:25:48

設(shè)計模式到元

2020-11-09 08:20:33

解釋器模式

2020-10-20 13:33:00

建造者模式

2020-11-05 09:38:07

中介者模式

2021-10-26 00:21:19

設(shè)計模式建造者

2021-10-28 19:09:09

模式原型Java
點贊
收藏

51CTO技術(shù)棧公眾號