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

.NET 設計模式:簡單工廠模式 (Simple Factory Pattern) 深度解析

     編輯:關於.NET

一、簡單工廠模式簡介

簡單工廠模式(Simple Factory Pattern)屬於創建型設計模式之一。其核心優勢在於將物件實例化的邏輯判斷封裝於工廠類別中,根據客戶端傳入的條件動態建立對應的具體產品類別。這使得客戶端無需直接依賴具體產品類別,降低了耦合度,符合「依賴倒轉原則」。

二、解決的問題

在傳統開發中,客戶端若需直接實例化具體類別,便會與具體實現產生強耦合。簡單工廠模式透過引入工廠類別,讓客戶端僅與抽象產品介面打交道,實際實例化由工廠根據參數決定,達到「客戶端不需關心物件由哪個子類別實例化」的目的。

三、模式結構分析

簡單工廠模式主要包含三個角色:

  • 抽象產品 (IProduct):定義產品的共同介面。
  • 具體產品 (ConcreteProduct):實作抽象產品介面的具體類別。
  • 簡單工廠 (SimpleFactory):包含核心邏輯判斷,根據參數回傳對應的具體產品實例。

簡單工廠模式結構圖

四、實例演示:簡易計算機

1. 情境說明

設計一個支援加、減運算的簡易計算機。結構如下:

計算機類別結構圖

  • SimpleFactory:簡單工廠類別
  • Operation:抽象運算類別
  • AddOperation:加法運算實作
  • SubOperation:減法運算實作

2. 程式碼實作

抽象運算類別與具體實作

/// 
/// 抽象運算類別
/// 
public abstract class Operation
{
    public int NumberA { get; set; }
    public int NumberB { get; set; }
    public abstract int GetResult();
}

/// 
/// 加法運算
/// 
public class AddOperation : Operation
{
    public override int GetResult() => NumberA + NumberB;
}

/// 
/// 減法運算
/// 
public class SubOperation : Operation
{
    public override int GetResult() => NumberA - NumberB;
}

簡單工廠類別

/// 
/// 簡單工廠類別
/// 
public class SimpleFactory
{
    public static Operation CreateOperation(string operation)
    {
        return operation switch
        {
            "+" => new AddOperation(),
            "-" => new SubOperation(),
            _ => null
        };
    }
}

客戶端呼叫

static void Main(string[] args)
{
    Operation op1 = SimpleFactory.CreateOperation("+");
    op1.NumberA = 10; op1.NumberB = 20;
    Console.WriteLine("{0}+{1}={2}", op1.NumberA, op1.NumberB, op1.GetResult());

    Operation op2 = SimpleFactory.CreateOperation("-");
    op2.NumberA = 10; op2.NumberB = 20;
    Console.WriteLine("{0}-{1}={2}", op2.NumberA, op2.NumberB, op2.GetResult());

    Console.Read();
}

3. 執行結果

計算機執行結果

五、總結

簡單工廠模式結構清晰、易於理解,適合產品類別較少且固定的場景。但其缺點在於違反「開放封閉原則」:新增產品類別時需修改工廠類別的判斷邏輯。實務上常作為工廠方法模式或抽象工廠模式的基礎演進。

參考來源:https://www.cnblogs.com/ywqu

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