首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 設計模式:享元模式完整測試與工廠驗證 (4/4)

     編輯:關於C語言

客戶端測試程式碼

展示享元工廠如何共享物件實例,減少記憶體佔用:

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

using Pattern.Flyweight;

public partial class Flyweight : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        string[] ary = new string[] { "XML", "sql" };

        MessageFactory messageFactory = new MessageFactory();

        foreach (string key in ary)
        {
            AbstractMessage messageObject = messageFactory.GetMessageObject(key);

            Response.Write(messageObject.Insert(new MessageModel("插入", DateTime.Now)));
            Response.Write("<br />");
            Response.Write(messageObject.Get()[0].Message + " " + messageObject.Get()[0].PublishTime.ToString());
            Response.Write("<br />");
        }
    }
}

執行結果

True
SQL方式獲取Message 2007-5-17 22:20:38
True
XML方式獲取Message 2007-5-17 22:20:38

結果分析

  • 物件共享:相同 key 多次呼叫 GetMessageObject 返回同一實例。
  • 內部狀態分離:MessageModel 作為外部狀態傳入,享元物件本身無狀態(或僅有內部狀態)。
  • 工廠管理:MessageFactory 透過字典快取管理享元實例。

享元模式核心價值

優勢說明
記憶體優化大量相似物件共享單一實例,大幅減少記憶體佔用。
效能提升避免重複建構大型物件,減少 GC 壓力。
適用場景大量細粒度物件、物件內部狀態可外部化、物件可共享。
經典案例文字編輯器字元物件、圖形編輯器圖元、資料庫連線池、執行緒池。

注意事項

  • 執行緒安全:共享物件需為不可變或執行緒安全設計。
  • 外部狀態管理:客戶端需負責維護並傳遞外部狀態(本例中 MessageModel)。
  • 複雜度權衡:引入工廠與狀態分離增加複雜度,僅在物件數量大且記憶體敏感時使用。
享元模式類別圖
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved