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

C# 設計模式:適配器模式類別適配器與物件適配器實作 (3/3)

     編輯:關於C語言

類別適配器:Message

透過繼承 SqlMessage 並實作 IMessage 介面,將源介面適配為目標介面:

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

namespace Pattern.Adapter
{
    /// 
    /// 適配器(Adapter)角色 - 類別適配器
    /// 把源適配到這個類別
    /// 
    public class Message : SqlMessage, IMessage
    {
        /// 
        /// 獲取 Message
        /// 
        /// MessageModel 清單
        public List<MessageModel> Select()
        {
            return base.Get();
        }

        /// 
        /// 插入 Message
        /// 
        /// Message 實體物件
        /// 是否成功
        public bool Add(MessageModel mm)
        {
            return base.Insert(mm);
        }
    }
}

物件適配器:Message2

透過組合 SqlMessage 實例並實作 IMessage 介面,委派呼叫給內部物件:

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

namespace Pattern.Adapter
{
    /// 
    /// 適配器(Adapter)角色 - 物件適配器
    /// 把源適配到這個類別
    /// 
    public class Message2 : IMessage
    {
        private SqlMessage _sqlMessage;

        /// 
        /// 建構函式
        /// 
        public Message2()
        {
            _sqlMessage = new SqlMessage();
        }

        /// 
        /// 獲取 Message
        /// 
        /// MessageModel 清單
        public List<MessageModel> Select()
        {
            return _sqlMessage.Get();
        }

        /// 
        /// 插入 Message
        /// 
        /// Message 實體物件
        /// 是否成功
        public bool Add(MessageModel mm)
        {
            return _sqlMessage.Insert(mm);
        }
    }
}

兩種適配器模式對比

維度類別適配器 (繼承)物件適配器 (組合)
實現方式繼承源類別 + 實作目標介面持有源類別實例 + 實作目標介面
耦合度較高(繼承關係)較低(委派關係)
覆寫源行為容易(可 override)較難(需重新委派)
適用多個源單一繼承限制,難以適配多個源可組合多個源物件
符合原則違反「組合優於繼承」符合「組合優於繼承」

適用場景建議

  • 類別適配器:源類別較簡單、需覆寫源方法、單一源適配場景。
  • 物件適配器:源類別複雜、需適配多個源、遵循組合優於繼承原則的現代設計。

本例中兩種適配器都將 SqlMessage 的 Get()/Insert() 適配為 IMessage 的 Select()/Add(),展示適配器模式「介面轉換」的核心價值。

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