C#簡單工廠模式
阿新 • • 發佈:2019-01-06
剛剛開始設計模式,有了視訊的基礎,寫程式碼相對容易一些,大話設計的第一章,首先就是程式碼規範,不論是以前學習VB還是準備考試的C++,到現在的C#,還有以後的Java等等,程式碼規範都是很重要的,所以從現在養成一個好習慣,規範自己的程式碼,培養專業素質。
跟著大鳥和小菜一步一步學習,學習了第一個模式——簡單工廠模式
我們知道,簡單工廠模式是類的建立模式,根據提供給它的資料返回幾個可能類中的一個類的例項。
優點:工程類中包含了必要地邏輯判斷,根據客戶端的選擇條件動態例項化相關的類,對客戶端來說,去除了與具體產品的依賴。
如下例子,是一個關於加減乘除運算的簡單工廠模式。結構圖如下:
感覺和他差不多的是工廠模式,它定義一個用於建立物件的介面,讓子類決定例項化哪一個類,工廠方法使一個類的例項化延遲到其子類。工廠方法模式實現時,客戶端需要決定例項化哪一個工廠來實現運算類,選擇判斷的問題還是存在的。using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace 簡單工廠模式演算法 { class Program { //客戶端程式碼 static void Main(string[] args) { Operation oper; oper = OperationFactory.createOperate("+");// oper.NumberA = 1; oper.NumberB = 2; double result = oper.GetResult(); Console.WriteLine("結果是:" + result); } //Operation運算類 public class Operation { private double _numberA = 0; private double _numberB = 0; public double NumberA { get { return _numberA; } set { _numberA = value; } } public double NumberB { get { return _numberB; } set { _numberB = value; } } public virtual double GetResult() { double result = 0; return result; } } class OperationAdd : Operation //加法計算 { public override double GetResult() { double result = 0; result = NumberA + NumberB; return result; } } class OperationSub : Operation //減法計算 { public override double GetResult() { double result = 0; result = NumberA - NumberB; return result; } } class OperationMul : Operation //乘法計算 { public override double GetResult() { double result = 0; result = NumberA * NumberB; return result; } } class OperationDiv : Operation //除法計算 { public override double GetResult() { double result = 0; if (NumberB == 0) //考慮除法的除數為0時沒有意義 throw new Exception("除法不能為0"); result = NumberA / NumberB; return result; } }//簡單運算工廠類 public class OperationFactory //定義OperationFactory(運算子工廠) { public static Operation createOperate(string operate) { Operation oper = null; switch (operate) { case "+": oper = new OperationAdd(); break; case "-": oper = new OperationSub(); break; case "*": oper = new OperationMul(); break; case "/": oper = new OperationDiv(); break; } return oper; } } } }
和簡單工廠對比來說,它的內部邏輯判斷移到了客戶端程式碼來進行,想要加功能,本來說該工廠類的,現在是修改客戶端。