記錄大話設計學習過程。 “工廠模式”和“簡單工廠模式”的區別就是把“到底實例哪一個對象的判斷邏輯”遷移出去。因為,如果是簡單工廠,哪天增加了新的運算,就必須修改簡單工廠類的判斷分支,這違反了“開放-封閉原則”。 現在判斷邏輯依然有,只是放在了客戶端,如果哪天增加新的運算,如果使用工廠模式,擴展就通過 ...
記錄大話設計學習過程。
“工廠模式”和“簡單工廠模式”的區別就是把“到底實例哪一個對象的判斷邏輯”遷移出去。因為,如果是簡單工廠,哪天增加了新的運算,就必須修改簡單工廠類的判斷分支,這違反了“開放-封閉原則”。
現在判斷邏輯依然有,只是放在了客戶端,如果哪天增加新的運算,如果使用工廠模式,擴展就通過增加工廠和運算類,而判斷邏輯只需修改客戶端。
using System; namespace ConsoleApp4 { class Program { public static void Main(string[] args) {
// if(+)addFactory,if(sub) subFactory 判斷省略 var operationFactory = new AddFactory(); var operation = operationFactory.CreateOperation(); operation.NumberA = Convert.ToDouble(Console.ReadLine()); operation.NumberB = Convert.ToDouble(Console.ReadLine()); Console.WriteLine(operation.GetResult()); Console.ReadLine(); } } interface IFactory { Operation CreateOperation(); } // 一個工廠,一個實例 class AddFactory : IFactory { public Operation CreateOperation() { return new OperationAdd(); } } class SubFactory : IFactory { public Operation CreateOperation() { return new OperationSub(); } } //運算基類 public class Operation { private double numberA; public double NumberA { get { return numberA; } set { numberA = value; } } private double numberB; public double NumberB { get { return numberB; } set { numberB = value; } } public virtual double GetResult() { double result = 0; return result; } } public class OperationAdd : Operation { public override double GetResult() { return NumberA + NumberB; } } public class OperationSub : Operation { public override double GetResult() { return NumberA - NumberB; } } }
工廠模式