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

設計模式 C# 實作:抽象工廠模式完整解析與程式碼範例

     編輯:關於C語言

模式動機:解決多產品族的建構問題

當系統需要建立的產品屬於多個產品等級結構(Product Hierarchies),且這些產品必須搭配使用(同屬一個產品族)時,單純的工廠方法模式已不足夠。抽象工廠模式提供一個統一介面,讓客戶端無須知道具體產品類別,即可建構整個產品族。

四大核心角色

角色說明典型實作
Abstract Factory(抽象工廠)定義建立各類產品的介面,核心契約介面或抽象類別
Concrete Factory(具體工廠)實作抽象工廠,含具體產品建構邏輯具體類別
Abstract Product(抽象產品)產品族中各類產品的父介面/基類介面或抽象類別
Concrete Product(具體產品)客戶端實際使用的產品實例具體類別

完整 C# 程式碼實作

抽象產品介面

public interface IProductA { }
public interface IProductB { }

具體產品類別(兩個產品族:族系 1 與 族系 2)

// 族系 1
public class ProductA1 : IProductA { public ProductA1() { } }
public class ProductB1 : IProductB { public ProductB1() { } }

// 族系 2
public class ProductA2 : IProductA { public ProductA2() { } }
public class ProductB2 : IProductB { public ProductB2() { } }

抽象工廠介面

public interface ICreator
{
    IProductA FactoryA();
    IProductB FactoryB();
}

具體工廠實作

public class ConcreteCreator1 : ICreator
{
    public IProductA FactoryA() => new ProductA1();
    public IProductB FactoryB() => new ProductB1();
}

public class ConcreteCreator2 : ICreator
{
    public IProductA FactoryA() => new ProductA2();
    public IProductB FactoryB() => new ProductB2();
}

適用場景判斷

  • 系統不應依賴產品類別的建構、組合、表達細節(所有工廠模式共通)。
  • 系統有多個產品族,但每次只使用其中一族。
  • 同一產品族的產品必須搭配使用,此約束需在設計中體現。
  • 提供產品類別庫,所有產品以相同介面呈現,客戶端不依賴具體實作。

類別圖關係說明

ICreator (介面)
  ▲
  │ 實作
ConcreteCreator1 ──────► ProductA1 (IProductA)
  │                       ProductB1 (IProductB)
  │
ConcreteCreator2 ──────► ProductA2 (IProductA)
                          ProductB2 (IProductB)

客戶端僅持有 ICreator 參考,透過 DI 或設定檔注入具體工廠,即可切換整個產品族,達到開放封閉原則。

延伸閱讀建議

建議先理解簡單工廠與工廠方法模式,再進階至抽象工廠。實務上常搭配依賴注入容器(如 ASP.NET Core 內建 DI)管理工廠實例生命週期。

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