? ? ? ? 創作背景:各位朋友,我們繼續學習C#的編程模式,本文主要介紹享元模式。享元模式是一種結構型設計模式,它主要用于減少創建對象的數量,從而提高程序性能。它通過共享對象的方式來減少內存的使用,特別是系統中有大量相似對象的時候,這種模式尤其有效。
? ? ? ? 享元模式的主要組成部分如下:
? ? ? ? 1、享元對象:享元對象就是被共享的對象,包含很多內部狀態,這些狀態通常是不變的。
? ? ? ? 2、享元工廠:負責創建和管理享元對象。
? ? ? ? 3、非共享狀態:每個享元對象的共享狀態是特定的,不會被共享。
? ? ? ? 示例代碼如下:
? ? ? ? 1、創建享元接口。
/// <summary>/// 享元對象接口/// </summary>public abstract class Flyweight{/// <summary>/// 相關操作/// </summary>/// <param name="strName">名稱</param>public abstract string Operation(string strName);}
? ? ? ? 2、實現共享享元對象。
/// <summary>/// 實際的享元類(共享狀態)/// </summary>public class ActualFlyweight : Flyweight{/// <summary>/// 相關操作/// </summary>/// <param name="strName"></param>/// <returns></returns>/// <exception cref="NotImplementedException"></exception>public override string Operation(string strName){return "創建了ActualFlyweight,名稱為:" + strName;}}
? ? ? ? 3、創建非共享享元對象。
/// <summary>/// 實際的享元類(非共享)/// </summary>public class UnsharedActualFlyweight : Flyweight{/// <summary>/// 相關操作/// </summary>/// <param name="strName"></param>/// <returns></returns>/// <exception cref="NotImplementedException"></exception>public override string Operation(string strName){return "創建了UnsharedActualFlyweight,名稱為:" + strName;}}
? ? ? ? 4、創建享元工廠。
/// <summary>/// 享元工廠/// </summary>public class FlyweightFactory{private Hashtable flyweights = new Hashtable();/// <summary>/// 構造函數/// </summary>public FlyweightFactory(){flyweights.Add("One", new ActualFlyweight());flyweights.Add("Two", new ActualFlyweight());flyweights.Add("Three", new ActualFlyweight());}/// <summary>/// 獲取Hashtable中的一個享元/// </summary>/// <param name="key"></param>/// <returns></returns>public Flyweight GetFlyweight(string key){return ((Flyweight)flyweights[key]);}}
? ? ? ? 5、客戶端調用。
/// <summary>/// 享元模式/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void btn_flyweight_Click(object sender, EventArgs e){FlyweightFactory factory = new FlyweightFactory();Flyweight fx = factory.GetFlyweight("One");tbox_flyweight.Text = fx.Operation("One");Flyweight fy = factory.GetFlyweight("Two");tbox_flyweight.Text += "\r\n" + fy.Operation("Two");Flyweight fz = factory.GetFlyweight("Three");tbox_flyweight.Text += "\r\n" + fz.Operation("Three");UnsharedActualFlyweight fu = new UnsharedActualFlyweight();tbox_flyweight.Text += "\r\n" + fu.Operation("Four");}
? ? ? ? 6、運行結果圖片。
? ? ? ? ?以上就是全部享元模式的一個簡單示例程序,希望對各位小伙伴能有個幫助。