工厂方法模式--实现计算器
生活随笔
收集整理的這篇文章主要介紹了
工厂方法模式--实现计算器
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
前言:工廠方法模式名字上和前面第一個模式差不多,那就是簡單工廠。其實這個計算器的例子,在前面使用簡單工廠實現了一遍了。這次只是和使用相同的例子和工廠方法模式進行對比。在實現工廠方法模式的過程中發現了這個模式的優缺點!
優點:是每一個類或者功能的獨立性非常好。實現了可擴展,而不用修改其他的類。
缺點:每增加一個產品就需要增加一個產品工廠的類。
目錄
類圖:
代碼:
? ? ? form窗體:
運算:
? ? ? 類:
? ? ? 運算類
? ? ?工廠方法:
結果:
類圖:
代碼:
? ? ? form窗體:
//窗體通用聲明Operation oper =new Operation();//實例化運算類double result = 0;//結果//給按鈕賦值string NumberA = "";string NumberB = "";//區分AB的賦值標簽,如果是fals就給A賦值。//否則給B賦值。bool flage = false; //數字按鈕 private void button1_Click(object sender, EventArgs e){//判斷賦值對象if (flage){NumberB += 1;textBox1.Text = NumberB;}else{NumberA += 1;textBox1.Text = NumberA;}} //每一個數字按鈕的代碼,幾乎一摸一樣。除了代表的數字之外, //其他的代碼完全一樣。所以就以1這個數字按鈕為例就可以了。在這就不一一列舉了!運算:
private void button12_Click(object sender, EventArgs e){flage = true;//更改賦值標簽//判斷是否計算IFactory operFactory = new AddFactory();//實例化加法工廠oper = operFactory.CreateOperation();//創建加法運算 } private void button11_Click(object sender, EventArgs e){flage = true;//更改賦值標簽IFactory operFactory = new SubFactory();oper = operFactory.CreateOperation();} private void button14_Click(object sender, EventArgs e){flage = true;//更改賦值標簽IFactory opertFactory = new MulFactory();oper = opertFactory.CreateOperation();} private void button14_Click(object sender, EventArgs e){flage = true;//更改賦值標簽IFactory opertFactory = new MulFactory();oper = opertFactory.CreateOperation();} private void button10_Click(object sender, EventArgs e){//通過屬性,給A和B賦值。oper.NumberA = double.Parse(NumberA);oper.NumberB = double.Parse(NumberB);//計算結果result = oper.GetResult();//顯示結果textBox1.Text = result.ToString();}? ? ? 類:
? ? ? 運算類
? ? ??
namespace 計算器 {/// <summary>/// 運算類/// </summary>public class Operation{//兩個數private double _numberA = 0;private double _numberB = 0;/// <summary>/// 第一個數/// </summary>public double NumberA{get { return _numberA; }set { _numberA = value; }}/// <summary>/// 第二個數/// </summary>public double NumberB{get { return _numberB; }set { _numberB = value; }}/// <summary>/// 計算方法/// </summary>/// <returns></returns>public virtual double GetResult(){double result = 0;return result;}} } namespace 計算器 {/// <summary>/// 加法類/// </summary>public class OperationAdd:Operation{/// <summary>/// 加法/// </summary>/// <returns>計算結果</returns>public override double GetResult(){double result = 0;result = NumberA + NumberB;return result;//返回結果}//end Getresult} } namespace 計算器 {/// <summary>/// 乘法類/// </summary> public class OperationMul:Operation{/// <summary>/// 乘法/// </summary>/// <returns>結果</returns>public override double GetResult(){double result = 0;result = NumberA * NumberB;return result;}//end GetResult} } namespace 計算器 { public class OpertionDiv:Operation{public override double GetResult(){double result = 0;if (NumberB==0){result = 0;}else{result = NumberA / NumberB;}//end ifreturn result;}//end GetResult} } namespace 計算器 {/// <summary>/// 減法/// </summary>public class OperationSub:Operation{public override double GetResult(){double result = 0;result = NumberA - NumberB;return result;}//end GetResult} }? ? ?工廠方法:
namespace 計算器 {//工廠接口public interface IFactory{Operation CreateOperation();//創建具體運算} } namespace 計算器 {public class SubFactory:IFactory{public Operation CreateOperation(){return new OperationSub();//減法}} } namespace 計算器 {/// <summary>/// 加法工廠/// </summary>public class AddFactory:IFactory{/// <summary>/// 創建加法運算/// </summary>/// <returns></returns>public Operation CreateOperation(){return new OperationAdd();//實例化加法類}} } namespace 計算器 {public class MulFactory:IFactory{public Operation CreateOperation(){return new OperationMul();//乘法}} } namespace 計算器 { public class DivFactory:IFactory{public Operation CreateOperation(){return new OpertionDiv();//除法}} }結果:
總結
以上是生活随笔為你收集整理的工厂方法模式--实现计算器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: nginx前端网页小图标配置(favic
- 下一篇: AutoCAD.net首尾相连的线分组连