一、定義
運用共享技術有效地支援大量細粒度的物件。
二、例項
首先,有個享元超類
public abstract class Website { public int websiteid; public Website(int _websiteid) { websiteid = _websiteid; } public abstract void Collecter(); }
其次,具體的子類
public class Mall : Website { public Mall(int _websiteid) : base(_websiteid) { } public override void Collecter() { Console.WriteLine("商城."); } }
最後,要一個享元工廠
public class WebsiteFactory { private Hashtable websites = new Hashtable(); public Website GetWebsiteByID(int key) { if (!websites.ContainsKey(key)) websites.Add(key, new Mall(key)); return (Website)websites[key]; } }
客戶端:
//------------------------享元模式------------------------ Flyweight.WebsiteFactory factory = new Flyweight.WebsiteFactory(); Flyweight.Website web_1= factory.GetWebsiteByID(1); web_1.Collecter(); Flyweight.Website web_2 = factory.GetWebsiteByID(2); web_2.Collecter(); Flyweight.Website web_3 = factory.GetWebsiteByID(2); web_3.Collecter();
三、總結
1、享元模式VS單例模式
享元是物件級別的, 也就是說在多個使用到這個物件的地方都只需要使用這一個物件即可滿足要求,
而單例是類級別的, 就是說這個類必須只能例項化出來一個物件,
可以這麼說, 單例是享元的一種特例,
設計模式不用拘泥於具體程式碼, 程式碼實現可能有n多種方式, 而單例可以看做是享元的實現方式中的一種, 但是他比享元更加嚴格的控制了物件的唯一性
2、應用環境
程式中應用了大量的物件,造成了很大的儲存空間,並且這些物件可以根據外部環境的引數進行區分。