05.设计模式.简单工厂模式(Simple Factory)

上传人:野鹰 文档编号:1352019 上传时间:2017-06-08 格式:PPTX 页数:35 大小:1.69MB
返回 下载 相关 举报
05.设计模式.简单工厂模式(Simple Factory)_第1页
第1页 / 共35页
05.设计模式.简单工厂模式(Simple Factory)_第2页
第2页 / 共35页
05.设计模式.简单工厂模式(Simple Factory)_第3页
第3页 / 共35页
05.设计模式.简单工厂模式(Simple Factory)_第4页
第4页 / 共35页
05.设计模式.简单工厂模式(Simple Factory)_第5页
第5页 / 共35页
点击查看更多>>
资源描述

《05.设计模式.简单工厂模式(Simple Factory)》由会员分享,可在线阅读,更多相关《05.设计模式.简单工厂模式(Simple Factory)(35页珍藏版)》请在金锄头文库上搜索。

1、设计模式(Design Pattern),张凯 副教授计算机学院 软件工程系,问题(Problem),实现控制台计算器利用任意一种面向对象的语言要求输入2个数和运算符,得到结果,问题(Problem),static void Main(string args) Console.Write(请输入数字A:); string strNumberA = Console.ReadLine(); Console.Write(请选择运算符号(+、-、*、/):); string strOperate = Console.ReadLine(); Console.Write(请输入数字B:); string

2、strNumberB = Console.ReadLine(); string strResult = ; switch (strOperate) case +: strResult = (double.Parse(strNumberA) + double.Parse(strNumberB).ToString(); break; case -: strResult = (double.Parse(strNumberA) - double.Parse(strNumberB).ToString(); break; case *: strResult = (double.Parse(strNumbe

3、rA) * double.Parse(strNumberB).ToString(); break; case /: if (strNumberB != 0) strResult = (double.Parse(strNumberA) / double.Parse(strNumberB).ToString(); else strResult = 除数不能为0; break; Console.WriteLine(结果是: + strResult); Console.ReadLine(); ,问题(Problem),原来的代码可复用吗?,问题(Problem),实现计算器Ctrl+C 和 Ctrl+

4、V维护的时候,带来灾难尽可能的办法去避免重复通过面向对象设计,让数据计算和用户交互方式分开,问题(Problem),class Operation public static double GetResult(double numberA, double numberB, string operate) double result = 0; switch (operate) case +: result = numberA + numberB; break; case -: result = numberA - numberB; break; case *: result = numberA

5、* numberB; break; case /: result = numberA / numberB; break; return result; ,问题(Problem),问题(Problem),static void Main(string args) try Console.Write(请输入数字A:); string strNumberA = Console.ReadLine(); Console.Write(请选择运算符号(+、-、*、/):); string strOperate = Console.ReadLine(); Console.Write(请输入数字B:); str

6、ing strNumberB = Console.ReadLine(); string strResult = ; strResult = Operation.GetResult(double.Parse(strNumberA), double.Parse(strNumberB), strOperate).ToString(); Console.WriteLine(结果是: + strResult); Console.ReadLine(); catch (Exception ex) Console.WriteLine(您的输入有错: + ex.Message); ,问题(Problem),pr

7、ivate void button8_Click(object sender, EventArgs e) if (bOperate) textBox1.Text = ; bOperate = false; textBox1.Text = textBox1.Text + (Button)sender).Text; private void button14_Click(object sender, EventArgs e) if (textBox1.Text != ) operate = (Button)sender).Text; numberA = double.Parse(textBox1.

8、Text); bOperate = true; private void button17_Click(object sender, EventArgs e) if (textBox1.Text != ) numberB = double.Parse(textBox1.Text); textBox1.Text = Operation.GetResult(numberA, numberB, operate).ToString(); bOperate = true; ,bool bOperate = false;double numberA = 0;double numberB = 0;strin

9、g operate = ;,问题(Problem),这种改变很有效,体现了面向对象的重要原则之一,单一职责原则,问题(Problem),添加平方根运算,问题(Problem),class Operation public static double GetResult(double numberA, double numberB, string operate) double result = 0; switch (operate) case +: result = numberA + numberB; break; case -: result = numberA - numberB; br

10、eak; case *: result = numberA * numberB; break; case /: result = numberA / numberB; break; return result; ,问题(Problem),紧耦合 vs 松耦合Switch中添加一个分支,搞定!思考:运算 + - * / 的代码GetResult是正确的,却需要在修改的时候暴露?如何修改或添加新运算,不影响其它的运算代码?,违背面向对象设计原则:开放封闭原则,问题(Problem),class Operation public static double GetResult(double numberA, double numberB, string operate) double result = 0; switch (operate) case +: result = numberA + numberB; break; case -: result = numberA - numberB; break; case *: result = numberA * numberB; break; case /: result = numberA / numberB; break; return result; ,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 研究报告 > 综合/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号