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

C# 設計模式:抽象工廠模式深度解析(八)— 反射機制消除硬編碼

     編輯:關於C語言

移植痛點:新客戶接入需修改原始碼

當日本 NEC 公司採購系統,需新增 JapaneseTax、JapaneseBonus 實作類別。原架構下,AbstractFactory.GetInstance() 仍需加入 else if (factoryName == "Japanese"),違反開閉原則(OCP):對修改關閉,對擴展開放。

若源碼未提供給移植團隊(如 Hippo 公司),根本無法修改工廠類別,移植工作無法進行。

解決方案:反射機制動態實例化

移除所有硬編碼類別名稱,透過組態檔指定完整類別名稱(含命名空間),利用 Assembly.Load + CreateInstance 動態建立工廠實例:

using System;
using System.Reflection;

namespace AbstractFactory
{
    public abstract class AbstractFactory
    {
        public static AbstractFactory GetInstance()
        {
            string factoryName = Constant.STR_FACTORYNAME; // 從組態檔讀取

            AbstractFactory instance = null;
            if (!string.IsNullOrEmpty(factoryName))
            {
                // 動態載入組件並建立實例,無需修改此代碼
                instance = (AbstractFactory)Assembly.Load(factoryName)
                                                    .CreateInstance(factoryName);
            }
            return instance;
        }

        public abstract Tax CreateTax();
        public abstract Bonus CreateBonus();
    }
}

架構優勢總結

  • 零源碼修改:新增國家只需新增 DLL 並修改組態檔
  • 團隊解耦:業務規則團隊與前端組裝團隊僅透過介面(Tax、Bonus)溝通
  • 面向介面程式設計精髓:Calculator 僅依賴抽象,不知具體實作細節
  • 部署彈性:支援插件式架構,新業務規則獨立編譯部署

完整系統模型

最終版模型中,抽象工廠作為「膠水」串聯業務規則與前端調用,大幅降低模組耦合,提升團隊並行開發效率。徹底理解此模式,是邁向 OOP 精髓——面向介面程式設計的關鍵里程碑。

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