[C#] #5 工廠模式與介面在C#中的應用 - antqtech/KM GitHub Wiki

工廠模式(Factory Pattern)是一種創建型設計模式,通過使用工廠方法來創建對象,而不是直接使用 new 關鍵字來實例化對象。這種模式使得程式碼更加靈活和可擴展,特別是在創建複雜對象或需要靈活配置的情況下。介面在工廠模式中起到關鍵作用,因為它提供了統一的對象創建契約。

工廠模式的基本結構

工廠模式通常包括以下幾個部分:

  1. 產品介面(Product Interface):定義產品的行為。
  2. 具體產品(Concrete Products):實現產品介面的具體類別。
  3. 工廠介面(Factory Interface):定義創建產品的方法。
  4. 具體工廠(Concrete Factories):實現工廠介面的具體類別。

範例:汽車工廠

我們以汽車工廠為例,展示如何使用工廠模式來創建不同類型的汽車。

1. 定義產品介面

首先,我們定義一個汽車介面 ICar

public interface ICar
{
    void Drive();
}

2. 實現具體產品

接下來,我們創建兩個具體的汽車類別,SedanSUV,它們都實現了 ICar 介面。

public class Sedan : ICar
{
    public void Drive()
    {
        Console.WriteLine("Driving a Sedan.");
    }
}

public class SUV : ICar
{
    public void Drive()
    {
        Console.WriteLine("Driving an SUV.");
    }
}

3. 定義工廠介面

我們定義一個工廠介面 ICarFactory,該介面有一個方法 CreateCar 用於創建汽車。

public interface ICarFactory
{
    ICar CreateCar();
}

4. 實現具體工廠

接下來,我們創建兩個具體工廠類別,SedanFactorySUVFactory,它們實現了 ICarFactory 介面。

public class SedanFactory : ICarFactory
{
    public ICar CreateCar()
    {
        return new Sedan();
    }
}

public class SUVFactory : ICarFactory
{
    public ICar CreateCar()
    {
        return new SUV();
    }
}

5. 使用工廠模式創建對象

現在,我們可以使用工廠模式來創建不同類型的汽車,而不需要直接使用 new 關鍵字。

class Program
{
    static void Main(string[] args)
    {
        ICarFactory sedanFactory = new SedanFactory();
        ICar sedan = sedanFactory.CreateCar();
        sedan.Drive(); // Output: Driving a Sedan.

        ICarFactory suvFactory = new SUVFactory();
        ICar suv = suvFactory.CreateCar();
        suv.Drive(); // Output: Driving an SUV.
    }
}

優點與應用

優點

  1. 解耦創建過程:工廠模式將對象創建過程封裝起來,客戶端程式碼不需要知道具體的創建細節。
  2. 提高靈活性和可擴展性:可以輕鬆添加新的產品類別和工廠,而不需要修改現有的程式碼。
  3. 統一管理對象創建:通過工廠來統一管理對象創建,使得對象創建更加標準化和可控。

應用場景

工廠模式適合用於以下情況:

  1. 需要靈活創建對象:當系統需要根據不同條件創建不同類型的對象時。
  2. 複雜對象創建:當對象創建過程比較複雜且需要封裝創建邏輯時。
  3. 高可擴展性需求:當系統需要經常擴展和添加新功能時,使用工廠模式可以提高系統的可擴展性。

總結

工廠模式是一種強大的設計模式,通過將對象創建邏輯封裝在工廠中,提供了一種靈活且可擴展的對象創建方式。介面在工廠模式中扮演關鍵角色,提供了統一的契約,確保不同工廠創建的對象具有一致的行為。通過理解和應用工廠模式,我們可以更有效地管理對象創建,提高程式碼的靈活性和可維護性。