1. 程式人生 > >【大話設計模式讀書筆記——工廠方法模式】

【大話設計模式讀書筆記——工廠方法模式】

down 除了 wikipedia override 客戶 class a over dfa mar

工廠方法模式

工廠方法模式的實質是“定義一個創建對象的接口,但讓實現這個接口的類來決定實例化哪個類。工廠方法讓類的實例化推遲到子類中進行。

工廠方法模式 VS 簡單工廠模式

簡單工廠的模式的最大優點在於工廠類中包含了必要的邏輯判斷,根據客戶端的選擇動態的實例化相關的類。對於客戶端來說,去除了與具體產品的依賴。
工廠方法模式,定義了一個用於創建對象的接口,讓子類決定實例化哪一個類。工廠方法使得一個類的實例化延遲到其子類。工廠方法模式實現時,客戶端需要決定實例化哪一個工廠來實現運算類,選擇判斷的問題還是存在。工廠方法把簡單工廠內部的邏輯判斷移到了客戶端來進行。如果你需要加功能,本來是需要修改工廠的,現在需要修改客戶端。
維基百科-工廠方法模式

工廠方法實現計算器

 /// <summary>
    /// 工廠接口
    /// </summary>
    public interface IFactory
    {
        Operation CreateOperation();
    }
 /// <summary>
    /// 運算基類
    /// </summary>
    public abstract class Operation
    {
        public double NumA { get; set; }
        public double NumB { get; set; }

        public abstract double GetResult();

    }
#region 加減乘除實現類

    public class OperationAdd : Operation
    {
        public override double GetResult()
        {
            return NumA + NumB;
        }
    }
    public class OperationSub : Operation
    {
        public override double GetResult()
        {
            return NumA - NumB;
        }
    }
    public class OperationMul : Operation
    {
        public override double GetResult()
        {
            return NumA * NumB;
        }
    }
    public class OperationDiv : Operation
    {
        public override double GetResult()
        {
            return NumA % NumB;
        }
    }

    #endregion
#region 具體工廠
    public class AddFactory : IFactory
    {
        public Operation CreateOperation()
        {
            return new OperationAdd();
        }
    }

    public class SubFactory : IFactory
    {
        public Operation CreateOperation()
        {
            return new OperationSub();
        }
    }

    public class MulFactory : IFactory
    {
        public Operation CreateOperation()
        {
            return new OperationMul();
        }
    }

    public class DivFactory : IFactory
    {
        public Operation CreateOperation()
        {
            return new OperationDiv();
        }
    }
    #endregion
            IFactory factory = new AddFactory();
            Operation operation = factory.CreateOperation();
            operation.NumA = 2;
            operation.NumB = 3;
            Console.WriteLine(operation.GetResult());

【大話設計模式讀書筆記——工廠方法模式】