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

C# 設計模式實作:抽象工廠模式打造跨平台電腦組裝系統

     編輯:關於C語言

模式意圖

抽象工廠 提供一個介面,用於建立 相關或相依物件家族 的具體實例,而無需指定其具體類別。本例模擬電腦組裝:Computer 由 RAM 與 CPU 組成,PC 與 Mac 為兩個產品家族,各自有對應的 PcRAM/PcCPU、MacRAM/MacCPU。

類別圖與角色對應

  • AbstractProduct:RAM, CPU (抽象基底類別)。
  • ConcreteProduct:PcRAM, PcCPU, MacRAM, MacCPU。
  • AbstractFactory:AbstractFactory (宣告 CreateRam(), CreateCpu())。
  • ConcreteFactory:PcFactory, MacFactory。
  • Client:ITMarket (使用工廠建立產品並組裝)。

完整代碼實作


using System;

// 產品抽象基底
public abstract class RAM
{
    public abstract Computer ComposeComputer(CPU cpu);
}
public abstract class CPU
{
    public abstract Computer ComposeComputer(RAM ram);
}

// 產品:電腦 (由 RAM + CPU 組合)
public class Computer
{
    private readonly RAM _ram;
    private readonly CPU _cpu;
    public Computer(RAM ram, CPU cpu)
    {
        _ram = ram; _cpu = cpu;
        Console.WriteLine($"Computer assembled: {_ram.GetType().Name} + {_cpu.GetType().Name}");
    }
}

// PC 家族具體產品
public class PcRAM : RAM
{
    public override Computer ComposeComputer(CPU cpu)
    {
        Console.WriteLine("PC Computer assembling...");
        return new Computer(this, cpu);
    }
}
public class PcCPU : CPU
{
    public override Computer ComposeComputer(RAM ram)
    {
        Console.WriteLine("PC Computer assembling...");
        return new Computer(ram, this);
    }
}

// Mac 家族具體產品
public class MacRAM : RAM
{
    public override Computer ComposeComputer(CPU cpu)
    {
        Console.WriteLine("Mac Computer assembling...");
        return new Computer(this, cpu);
    }
}
public class MacCPU : CPU
{
    public override Computer ComposeComputer(RAM ram)
    {
        Console.WriteLine("Mac Computer assembling...");
        return new Computer(ram, this);
    }
}

// 抽象工廠
public abstract class AbstractFactory
{
    public abstract RAM CreateRam();
    public abstract CPU CreateCpu();
}

// 具體工廠
public class PcFactory : AbstractFactory
{
    public override RAM CreateRam() => new PcRAM();
    public override CPU CreateCpu() => new PcCPU();
}
public class MacFactory : AbstractFactory
{
    public override RAM CreateRam() => new MacRAM();
    public override CPU CreateCpu() => new MacCPU();
}

// 客戶端:IT 市場通道
public class ITMarket
{
    private readonly RAM _ram;
    private readonly CPU _cpu;
    public ITMarket(AbstractFactory factory)
    {
        _ram = factory.CreateRam();
        _cpu = factory.CreateCpu();
    }
    public void Run()
    {
        _ram.ComposeComputer(_cpu); // 雙向組裝示範
        _cpu.ComposeComputer(_ram);
    }
}

// 程式進入點
public class ClientApp
{
    public static void Main()
    {
        Console.WriteLine("=== PC Factory ===");
        var pcMarket = new ITMarket(new PcFactory());
        pcMarket.Run();

        Console.WriteLine("\n=== Mac Factory ===");
        var macMarket = new ITMarket(new MacFactory());
        macMarket.Run();
    }
}

執行輸出


=== PC Factory ===
PC Computer assembling...
Computer assembled: PcRAM + PcCPU
PC Computer assembling...
Computer assembled: PcRAM + PcCPU

=== Mac Factory ===
Mac Computer assembling...
Computer assembled: MacRAM + MacCPU
Mac Computer assembling...
Computer assembled: MacRAM + MacCPU

設計優勢

  1. 家族一致性:PcFactory 保證產出的 RAM/CPU 皆為 PC 規格,避免混用 Mac 組件。
  2. 開閉原則:新增產品家族 (如 ServerFactory) 僅需新增具體工廠與產品類別,不修改 現有 ITMarket 或抽象介面。
  3. 解耦:客戶端 (ITMarket) 僅依賴抽象介面 (AbstractFactory, RAM, CPU),與具體實作無關。

適用場景

  • 系統需支援多種「外觀風格」或「平台特定實作」 (如 UI 元件庫:Win32/Web/GTK)。
  • 相關物件需成組使用,且客戶端不應知曉具體建立細節。

結語

抽象工廠模式以「工廠介面 + 產品家族」結構,優雅解決跨平台/多風格物件建立問題。C# 介面與多型特性使其實作自然且型別安全。

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