感受设计演变过程中所蕴含的大智慧。体会乐与怒的程序人生中值得回味的一幕幕。——《大话设计模式》

能把计算机编程类的书写成小说一样的效果,是这本书的最大亮点,也是我最为敬佩的地方。拿到书之后,爱不释手。用了23个番茄将书完整的通读了一遍。在读书的过程中时而凝眉沉思,不得其解,时而拍腿称快,大呼妙哉!尽管非常多的地方还是不太明确,可是思维已经随着问题在程序世界里徘徊。

书的第一章直接抛给读者一个问题:代码无措就是优?通常有过编程基础的人都会给出否定的答案,可是对于这个问题的理解显然是不够深刻,因此以下的样例会让你刻骨铭心。

假如你去软件公司面试。面试官给你一个题目:请用C++、Java、C#或者VB.NET等随意一种面向对象语言实现一个计算器控制台程序,要求输入两个数和运算符号。输出结果。

或许在你看到这个题目的时候,心中会窃喜:so easy!

然后你三下五除二。给出了自觉得惬意的方案:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace 业余计算器
{class Program{static void Main(string[] args){Console.Write("请输入数字A:");string A = Console.ReadLine();Console.Write("请输入运算符号(+、-、*、/):");string B = Console.ReadLine();Console.Write("请输入数字B:");string C = Console.ReadLine();string D = "";if (B == "+")D = Convert.ToString(Convert.ToDouble(A) + Convert.ToDouble(C));if (B == "-")D = Convert.ToString(Convert.ToDouble(A) - Convert.ToDouble(C));if (B == "*")D = Convert.ToString(Convert.ToDouble(A) * Convert.ToDouble(C));if (B == "/")D = Convert.ToString(Convert.ToDouble(A) / Convert.ToDouble(C));Console.WriteLine("结果是:" + D);}}
}

先不说上面给出的解决方式符不符合面向对象的思想,单从代码本身来看就存在命名不规范,if推断冗余,代码大量反复。以及未做异常处理等一系列问题,最大的问题就是根本没把面向对象放在眼里。如此这般。面试结果可想而知。

那么专业的人士给出的解决方式是什么样子的,请看以下的代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace ConsoleApplication5
{class Program{static void Main(string[] args){Operation oper=null ;double x, y;string o;Console.WriteLine("请输入运算符:");o = Convert.ToString(Console.ReadLine());oper = OperationFactory.createOperate(o);Console.WriteLine("请输入运算数1:");x =Convert .ToDouble ( Console.ReadLine ());Console.WriteLine("请输入运算数2:");y =Convert .ToDouble ( Console.ReadLine ());oper.NumberA = x  ;oper.NumberB = y  ;double result = oper.GetResult();Console.WriteLine("运算结果是:{0}",result);Console.Read();}}//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)throw new Exception("除数不能为0。");result = NumberA / NumberB;return result;}}//简单运算工厂类public class 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;}}}

两者相比較,你就会发现,面向对象的三大特性封装、继承、多态在后者中体现的淋漓尽致,并且其代码的可维护性,可复用性,可扩展性以及灵活性等等都非常高,最大的亮点就是添加了简单运算工厂类,这是一个设计模式的体现,即用一个单独的类去完毕实例化对象的过程。通俗来讲就是把产品设计(參数)给工厂。工厂负责生产产品,这就是所谓的工厂模式。

转载于:https://www.cnblogs.com/brucemengbm/p/6940504.html

群“模”乱舞之简单工厂模式相关推荐

  1. Java设计模之简单工厂模式

    设计模式之工厂模式一简单工厂模式 工厂模式由来: 在我们创建对象的时候使用,使用new操作的.如果多个对象创建都使用new会.所以工厂模式就是用来代理new操作的一种模式.根据工厂模式由来,我们可以看 ...

  2. 设计模式C#描述之——简单工厂模式、抽象工厂模式、单例与多例模式

    设计模式C#描述之--简单工厂模式 前 言:设计模式是软件开发领域的精髓之一.学好设计模式是目前每一个开发人员的必修课.目前关于设计模式的书很多,其中比较好的有GOF那本的中译本,但并 不很适合初学者 ...

  3. java 工厂模式 计算器_简单工厂模式实现简易计算器

    packageFactoryMethodPattern;/*创建人:czc 创建时间:2019/12/16 创建用途:简单工厂模式实现计算器--主界面*/ import javax.swing.*;i ...

  4. 轻松看懂java设计模式简单工厂模式

    点击上方"好好学java",选择"置顶公众号" 优秀学习资源.干货第一时间送达! 精彩内容 java实战练习项目教程 2018微服务资源springboot.s ...

  5. 设计模式—工厂模式之简单工厂模式

    1. 简单工厂模式简介 简单工厂模式(Simple Factory),又被称为"静态工厂方法模式".它属于"创建模式"(创建对象的模式),并且是"工厂 ...

  6. 设计模式---3(工厂方法模式的概念,工厂方法模式的实现,工厂方法模式和简单工厂模式比较)

    工厂方法模式 概念 工厂方法模式同样属于类的创建型模式又被称为多态工厂模式 . 工厂方法模式的意义 定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中. 核心工厂类不再负责产品的创建,这样核 ...

  7. 设计模式之-简单工厂模式

    前言 为了理解和学习简单工厂模式,我们先看一段简单计算器的代码 class Program{static void Main(string[] args){Console.Write("请输 ...

  8. 简单工厂模式和策略模式结合使用php

    策略模式是有客户端自行实例化算法类的,而简单工厂模客户端只传参数,不关心对象的生成. 结合两种模式,可以在使用策略模式的时候客户端不再生成算法的对象.修改策略模式的配置类即可. 在之前策略模式基础上, ...

  9. php设计一个盒子类代码_PHP设计模式之简单工厂模式(Simple Factory)代码实例大全(七)...

    目的[1] 简单工厂模式是一个精简版的工厂模式. 它与静态工厂模式最大的区别是它不是『静态』的.因为非静态,所以你可以拥有多个不同参数的工厂,你可以为其创建子类.甚至可以模拟(Mock)它,这对编写可 ...

最新文章

  1. 那些人工智能未来式,没看过你就 OUT 了
  2. Selenium | 网上教程
  3. 旅行者 问题_门槛项目:没有旅行者回到他的原籍城市。
  4. sftp shell 批量上传文件_如何在shell脚本里使用sftp批量传送文件-阿里云开发者社区...
  5. 操作系统(4)-进程间通信
  6. 伺服怎么接单相220伏_三相380伏电机能接单相220伏运行吗?
  7. ORA-00257 archiver error. 错误的处理方法
  8. 【WCF】无法加载协定为“ServiceReference1.xxxxxx”的终结点配置部分,因为找到了该协定的多个终结点配置。请按名称指示首选的终结点配置部分.
  9. 把JS和CSS合并到1个文件
  10. 平行交通:虚实互动的智能交通管理与控制
  11. token干什么用_什么是Token?Token有什么用处?为什么使用它?Token认证又是什么?...
  12. awk及sum求和!
  13. python中文转化gb2321_使用Python进行中文繁简转换的实现代码
  14. 电脑版微信提示音mp3_安卓充电提示音修改教程,可以自定义哦~
  15. 线段树 - 敌兵布阵
  16. Android 蓝牙手柄连接流程解析和自动化方案
  17. 可以将图片格式转换成CAD格式图纸吗?
  18. OpenCV4.5.2(+opencv_contrib)+CMake3.20.1+vs2017重新编译
  19. 理查和马文价值导向选股法则!
  20. STM32H743多路串口调试经验总结(HAL库)

热门文章

  1. [附源码]Nodejs计算机毕业设计火车票预定管理系统.PPTExpress(程序+LW)
  2. Linux until(循环语句)命令使用
  3. 南京邮电大学操作系统——实验三:页面置换算法
  4. 王者服务器维护公告2月,王者天下2月17日服务器调整公告
  5. 独立站流量转化终极答案
  6. 后端开发人员需要具备哪些软件开发经验?
  7. 20200123_导航电子地图道路网络分层原理_研讨会视频
  8. 烘焙混合物的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  9. 测试开发进阶(四十四)
  10. 15、配置路由器的动态路由(RIP协议)