享元模式=單例模式+工廠模式+合成模式
單例模式:
保證一個類僅有一個實例,並提供一個訪問它的全局訪問點。
結構圖:
註意多線程的單例。
[java]
package com.bankht.Flyweight.complex;
/**
* @author: 特種兵—AK47
* @創建時間:2012-6-26 下午03:25:14
*
* @類說明 :單例
*/
public class Singleton {
private static Singleton instance;
private static final Object syncRoot = new Object();
private Singleton() {
}
public static Singleton getInstance() {
if (instance == null) {
synchronized (syncRoot) {
instance = new Singleton();
}
}
return instance;
}
}
package com.bankht.Flyweight.complex;
/**
* @author: 特種兵—AK47
* @創建時間:2012-6-26 下午03:25:14
*
* @類說明 :單例
*/
public class Singleton {
private static Singleton instance;
private static final Object syncRoot = new Object();
private Singleton() {
}
public static Singleton getInstance() {
if (instance == null) {
synchronized (syncRoot) {
instance = new Singleton();
}
}
return instance;
}
}
享元模式:
享元的英文是Flyweight,它是一個來自於體育方面的專業用語,在拳擊、摔跤和舉重比賽中特指最輕量的級別。把這個單詞移植到軟件工程裡面,也是用來表示特別小的對象,即細粒度對象。Flyweight享元,可以理解為共享元對象,也就是共享細粒度對象。享元模式就是通過使用共享的方式,達到高效地支持大量的細粒度對象。它的目的就是節省占用的空間資源,從而實現系統性能得到改善。
享元模式主要作用是實現對象的共享,即使用共享池,從而減少內存分配的開銷。享元模式通常與工廠模式一起使用,它包含瞭多個共享的組合對象,因此:享元模式=單例模式+工廠模式+合成模式,其結構如圖12-25所示
其中:FlyweightFactoiy享元工廠負責創建和管理享元對象,它必須保證享元對象可以被系統適當共享。當一個客戶端對象請求一個享元對象的時候,享元工廠需要檢查系統中是否已經有一個符合要求的享元對象,如果已經有瞭,享元工廠就應當提供這個已有的享元對象;如果系統中沒有一個適當的享元對象的話,享元工廠就應當創建一個新的合適的享元對象。Flyweight是所有的具體享元類的超類,為這些類規定出需要實現的公共接口或抽象類。MyFlyweight1和MyFlyweight2則是實現抽象享元所規定的接口。
作者:m13666368773