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