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

C# 設計模式:適配器模式 (4) - 適用場景判斷與 Class/Object Adapter 實戰範例

     編輯:關於C語言

何時使用適配器模式

  1. 系統需使用現有類但介面不符。
  2. 建立可重用類與多個無關類 (含未來新增) 協作。
  3. Object Adapter 適用:需適配多個現有子類,若用 Class Adapter 需為每個子類寫適配器,不切實際。

實戰範例:汽車 vs 飛機介面適配

using System;
// Target: 客戶期望介面
public interface ICar { void Drive(); }

// 直接實作
public class CToyota : ICar
{
    public void Drive() => Console.WriteLine("Vroom Vroom, Toyota!");
}

// Adaptee: 被適配者
public class CCessna
{
    public void Fly() => Console.WriteLine("Static runup OK, C172!");
}

// Class Adapter: 多重繼承 (C# 用介面實現)
public class CDrivableCessna : CCessna, ICar
{
    public void Drive() => base.Fly(); // Drive 內部呼叫 Fly
}

// Object Adapter: 組合/委派
public class CDrivableCessna2 : ICar
{
    private CCessna contained = new CCessna();
    public void Drive() => contained.Fly();
}

// Client
public class Client
{
    static void Main()
    {
        ICar car = new CToyota();
        Console.Write("Class Adapter: "); car.Drive();
        car = new CDrivableCessna();
        Console.Write("Driving Cessna: "); car.Drive();
        car = new CDrivableCessna2();
        Console.Write("Object Adapter: "); car.Drive();
    }
}

對比

類型實現方式優點缺點
Class Adapter繼承 Adaptee + 實作 Target可覆寫 Adaptee 行為C# 單繼承限制,一對一適配
Object Adapter組合 Adaptee 實例 + 實作 Target一個適配器適配多個 Adaptee 子類難以覆寫 Adaptee 方法
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved