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

C# 設計模式:工廠方法模式抽象工廠與具體工廠實作 (4/4)

     編輯:關於C語言

抽象工廠:AbstractMessageFactory

定義工廠方法介面,延遲具體產品實例化到子類別:

using System;
using System.Collections.Generic;
using System.Text;

namespace Pattern.FactoryMethod
{
    /// 
    /// 抽象 Message 工廠(Creator)
    /// 
    public abstract class AbstractMessageFactory
    {
        /// 
        /// 工廠方法
        /// 
        /// AbstractMessage
        public abstract AbstractMessage CreateMessage();
    }
}

具體工廠:SqlMessageFactory

實作工廠方法,返回 SQL 具體產品:

using System;
using System.Collections.Generic;
using System.Text;

namespace Pattern.FactoryMethod
{
    /// 
    /// SqlMessage 工廠(ConcreteCreator)
    /// 
    public class SqlMessageFactory : AbstractMessageFactory
    {
        /// 
        /// 實作工廠方法,返回 SqlMessage 物件
        /// 
        /// SqlMessage 實例
        public override AbstractMessage CreateMessage()
        {
            return new SqlMessage();
        }
    }
}

具體工廠:XMLMessageFactory

實作工廠方法,返回 XML 具體產品:

using System;
using System.Collections.Generic;
using System.Text;

namespace Pattern.FactoryMethod
{
    /// 
    /// XMLMessage 工廠(ConcreteCreator)
    /// 
    public class XMLMessageFactory : AbstractMessageFactory
    {
        /// 
        /// 實作工廠方法,返回 XMLMessage 物件
        /// 
        /// XMLMessage 實例
        public override AbstractMessage CreateMessage()
        {
            return new XMLMessage();
        }
    }
}

工廠方法模式完整調用流程

  1. 客戶端根據需求選擇具體工廠(new SqlMessageFactory() 或 new XMLMessageFactory())。
  2. 呼叫工廠方法 CreateMessage() 獲得抽象產品 AbstractMessage。
  3. 透過抽象產品介面呼叫 Insert()、Get() 等業務方法。
  4. 具體工廠決定實例化哪個具體產品類別,客戶端無需知悉具體類別名稱。

模式優勢總結

  • 解耦合:客戶端依賴抽象工廠與抽象產品,不依賴具體類別。
  • 擴展性:新增產品只需新增對應的具體工廠與具體產品,符合開放封閉原則。
  • 單一職責:每個工廠類別只負責創建一種產品。
工廠方法模式類別圖
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved