[C#] #5 工廠模式與介面在C#中的應用 - antqtech/KM GitHub Wiki
工廠模式(Factory Pattern)是一種創建型設計模式,通過使用工廠方法來創建對象,而不是直接使用 new
關鍵字來實例化對象。這種模式使得程式碼更加靈活和可擴展,特別是在創建複雜對象或需要靈活配置的情況下。介面在工廠模式中起到關鍵作用,因為它提供了統一的對象創建契約。
工廠模式的基本結構
工廠模式通常包括以下幾個部分:
- 產品介面(Product Interface):定義產品的行為。
- 具體產品(Concrete Products):實現產品介面的具體類別。
- 工廠介面(Factory Interface):定義創建產品的方法。
- 具體工廠(Concrete Factories):實現工廠介面的具體類別。
範例:汽車工廠
我們以汽車工廠為例,展示如何使用工廠模式來創建不同類型的汽車。
1. 定義產品介面
首先,我們定義一個汽車介面 ICar
。
public interface ICar
{
void Drive();
}
2. 實現具體產品
接下來,我們創建兩個具體的汽車類別,Sedan
和 SUV
,它們都實現了 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. 實現具體工廠
接下來,我們創建兩個具體工廠類別,SedanFactory
和 SUVFactory
,它們實現了 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.
}
}
優點與應用
優點
- 解耦創建過程:工廠模式將對象創建過程封裝起來,客戶端程式碼不需要知道具體的創建細節。
- 提高靈活性和可擴展性:可以輕鬆添加新的產品類別和工廠,而不需要修改現有的程式碼。
- 統一管理對象創建:通過工廠來統一管理對象創建,使得對象創建更加標準化和可控。
應用場景
工廠模式適合用於以下情況:
- 需要靈活創建對象:當系統需要根據不同條件創建不同類型的對象時。
- 複雜對象創建:當對象創建過程比較複雜且需要封裝創建邏輯時。
- 高可擴展性需求:當系統需要經常擴展和添加新功能時,使用工廠模式可以提高系統的可擴展性。
總結
工廠模式是一種強大的設計模式,通過將對象創建邏輯封裝在工廠中,提供了一種靈活且可擴展的對象創建方式。介面在工廠模式中扮演關鍵角色,提供了統一的契約,確保不同工廠創建的對象具有一致的行為。通過理解和應用工廠模式,我們可以更有效地管理對象創建,提高程式碼的靈活性和可維護性。