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

C# 設計模式:享元模式抽象享元與 SQL 具體享元 (2/4)

     編輯:關於C語言

抽象享元:AbstractMessage

定義享元介面,操作外部狀態 MessageModel:

using System;
using System.Collections.Generic;
using System.Text;

namespace Pattern.Flyweight
{
    /// 
    /// 操作 Message 抽象類別(Flyweight)
    /// 
    public abstract class AbstractMessage
    {
        /// 
        /// 獲取 Message
        /// 
        /// MessageModel 清單
        public abstract List<MessageModel> Get();

        /// 
        /// 插入 Message
        /// 
        /// Message 實體物件(外部狀態)
        /// 是否成功
        public abstract bool Insert(MessageModel mm);
    }
}

具體享元:SqlMessage

實作抽象享元,提供 SQL 操作邏輯:

using System;
using System.Collections.Generic;
using System.Text;

namespace Pattern.Flyweight
{
    /// 
    /// Sql 方式操作 Message(ConcreteFlyweight)
    /// 
    public class SqlMessage : AbstractMessage
    {
        /// 
        /// 獲取 Message
        /// 
        /// MessageModel 清單
        public override List<MessageModel> Get()
        {
            List<MessageModel> l = new List<MessageModel>();
            l.Add(new MessageModel("SQL方式獲取Message", DateTime.Now));
            return l;
        }

        /// 
        /// 插入 Message
        /// 
        /// Message 實體物件(外部狀態)
        /// 是否成功
        public override bool Insert(MessageModel mm)
        {
            // 程式碼略
            return true;
        }
    }
}

享元模式核心概念:內部狀態 vs 外部狀態

狀態類型定義本例對應儲存位置
內部狀態 (Intrinsic)可共享、不隨環境變化SqlMessage/XMLMessage 實例本身(無欄位)享元物件內部
外部狀態 (Extrinsic)不可共享、隨環境變化MessageModel (Message內容、發布時間)客戶端管理,方法調用時傳入

設計要點

  • 無狀態享元:本例中 SqlMessage/XMLMessage 無實例欄位,純行為物件,極適合共享。
  • 外部狀態傳入:Insert(MessageModel mm) 將外部狀態作為參數傳入,而非儲存在享元內部。
  • 介面統一:抽象享元定義操作外部狀態的方法簽名。

享元模式關鍵在於識別並分離外部狀態,使大量相似物件能共享少數享元實例,達到記憶體優化目的。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved