在系統中,當需要大量重複的細粒度物件時,我們往往可以只維護乙個例項;這樣不僅避免了建立大量重複物件對資源的浪費,也易於我們的維護和拓展。
1、定義
運用共享技術有效地支援大量細粒度的物件。
2、類圖結構
拿**建設例子來說,有時候,我們建立的一系列**(流量小)都是結構十分相似、功能又相近的,這種情況下,往往就可以使用同乙個**的例項;
我們使用乙個**工廠來管理和維護我們的**。
對應**:
**工廠
public
class websitefactory
return (website) flyweights.get(key);
}//獲取**分類總數
public
intgetwebsitecount()
}
**(包含共享的資料和不會共享的內容)
public
abstract
class website
不會發生共享的資料,例如使用者
public
class user
public string getname()
}
具體**實現者
public
class
concretewebsite
extends
website
@override
public
void
use(user user)
}
客戶端呼叫:
websitefactory f = new websitefactory();
website fx = f.getwebsitecatagory("產品展示");
fx.use(new user("段譽"));
website fy = f.getwebsitecatagory("產品展示");
fx.use(new user("虛竹"));
website fz = f.getwebsitecatagory("部落格");
fz.use(new user("楊過"));
website fl = f.getwebsitecatagory("部落格");
fl.use(new user("周伯通"));
system.out
.println("**分類總數為:"+f.getwebsitecount());
結果為:
享元模式可以避免大量非常相似類的開銷,如果我們使用的大量例項除了幾個引數外基本上相同,我們就可以把這些引數遷移到類例項的外面,在方法呼叫時將它們傳遞進來(如例子中的user),這樣就可以通過共享大幅度減少單個例項的數目。
threadpool 執行緒池 與資料庫連線池 都有使用享元模式。
享元模式(Flyweight) 結構型
1 基礎知識 定義 提供了減少物件數量從而改善應用所需的物件結構的方式。特徵 運用共享技術有效支援大量細粒度的物件。本質 分離與共享。使用場景 1 如果乙個應用程式使用了大量的細粒度物件,可以使用享元模式來減少物件數量。如果由於使用大量的物件,造成很大的儲存開銷,可以使用享元模式來減少物件數量,並節...
結構型模式 享元模式
七大結構型模式之六 享元模式。姓名 享元模式 英文名 flyweight pattern 價值觀 共享富貴 個人介紹 use sharing to support large numbers of fine grained objects efficiently.使用共享物件可有效地支援大量的細粒度...
結構型模式 享元模式
文章首發 結構型模式 享元模式 七大結構型模式之六 享元模式。姓名 享元模式 英文名 flyweight pattern 價值觀 共享富貴 個人介紹 use sharing to support large numbers of fine grained objects efficiently.使用...