天天看點

設計模式總結篇系列:享元模式(Flyweight)

我們都知道,Java中的String類具有如下特性:String是一個不可變類,當直通過用字元串方式使用String對象時,Jvm實際上在記憶體中隻存有一份,且存在字元串常量池中。當對字元串直接進行修改時(如直接聯接另一個字元串常量),Jvm會首先去字元串常量池中查找是否已經存在此字元串,不存在則建立一份放在池中,存在則直接使用。諸如此類:當系統中可能具有多個相同的對象時,對于具有相同的内容的對象可以實作對象的共享,即共享池,以此避免不必要的相同對象的建立以減少系統記憶體的開銷。稱之為享元模式。

對于定義中的相同的對象,相同一詞如何了解?首先我們需要解釋下享元模式中的兩個概念:内蘊狀态和外蘊狀态。

内蘊狀态:享元對象内部的可以以此來作為區分是否是同一個對象的依據的屬性。内蘊狀态不随着外部環境的變化而變化。

外蘊模式:雖然也是享元對象的屬性,但可以随着外部環境的變換而變化,同一享元對象在不同的地方其内部的外蘊狀态可能不同。

享元模式一般的累定義過程如下:

1. 定義享元類的接口:

2.定義發具體的享元類:

3.

定義工廠類,用來管理享元對象:

4. 用戶端測試:

 通過最近的7篇文章大體上對Java設計模式中的七中結構型模式進行了總結,分别是:擴充卡模式、裝飾器模式、代理模式、外觀模式、橋接模式、組合模式和享元模式。