设计模式(2)

摘要:
在上一个日志中,我们应用了设计模式的三个特性的封装。今天,我们继续研究程序设计的其他优秀特性。当我们在客户端应用时,我们直接输入相应的运算符:这样,只需在客户端输入操作符号,工厂类就会实例化相应的对象。通过对工厂类中开关的判断将形成不同的实例,工厂类具有设计模式中显示的一个重要特征:多态性,以及通过父类实现计算器结果。

上一篇日志、我们应用到了设计模式三大特性的封装、今天这一片我们继续研究程序设计的另几种比较优秀的特性。

在上面的程序中这款计算器只涉及了加、减、乘、除算法、现在我们要加一个平方根运算,我们的思路会是改动我们的计算类,在switch中加一个分支就行了,但是这样的话要让加减乘除的运算都得来参与编译,如果你一不小心,把加法运算改成了减法,这岂不是大大的糟糕。这还不是最主要的,看这个例子,如果公司要求你为公司的薪资管理系统做维护,原来只有技术人员(月薪),市场销售人员(底薪+提成),经理(年薪+股份)三种运算算法,现在要增加兼职人员(时新)的算法,但按照咱的思路写法,公司就必须把包含原三种算法的运算类给我们,让我们修改,咱小算盘一打、嘿嘿、“TMD,公司给我的工资水平那么低,我真是郁闷,这下有机会了”,于是你除了增加了兼职算法以外,在技术人员(月薪)算法中加上一句:

if(员工是我)

{

   salary=salary*1.1;

}

这就意味着,咱的月薪每月会增加10%、哈哈、你爽了、但公司是不是也很爽呢,所以这样的做法就是原来运行良好的功能代码产生了变化,这样造成了很大的风险。

所以咱们要做的在增加新的算法的同时,修改其中一个不影响另外的几个,增加运算算法也不影响其他代码,这才是最成功的设计方法,好、至此咱就应用到设计模式的其他几种特性。

图片

首先抽象出一个运算类,他有两个number属性,主要用于计算前后数,然后有一个虚方法(getresult),用于的到结果,然后我把加减乘除的写成了运算类的子类,继承他后,重写getresult()方法,这样要修改任何一个算法,就不需要提供其他算法代码。

代码如下:

图片

那我们该怎么去应用咱们区分好的这个类呢?

看下面的代码:
图片

我们添加一个工厂类用以初始化我们所需要的类、这里根据初始化该类的时候判断输入的字符进行相应类的实例化。

我们在客户端应用的时候直接输入相应的操作符:

图片

这个样子,在客户端的只需要输入运算符号,工厂类就实例化出合适的对象,,通过工厂类中switch的判断形成不同的实例,这在设计模式中有一重要的特性显示出来:多态性、通过父类的方式实现了计算器的结果。而算法的实现是通过重写父类中的get_result算法呢实现,在这期间有用到了设计模式的另一个重要的特性:继承性。这样的程序不管你是控制台程序、windows程序、web程序、PDA程序或者手机程序,都可以用这段代码来实现计算器的功能,复用性~~~!如果我们有一天要改动加法运算,我们只需要改动加法类即可(operation_add)。相应的要增加各种复杂的运算,比如平方根、立方根、自然对数、正弦函数只需要增加相应的运算子类即可,但是在增加子类算法的同时我们需要改动switch中增加分支、这违反了设计模式中的“开放——封闭原则”

我们该这样做呢?

然而这一篇日志我们已经在一个简单的功能中实现了设计模式中一个比较基础的设计模式方法:简单工厂方法模式。

免责声明:文章转载自《设计模式(2)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇记录一下:给电推剪改锂电池flutter-double小数点相加,会出现小数点很多位下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

浅析设计模式

  一、什么是设计模式? 设计模式,是一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总结。每一个设计模式系统地命名、解释和评价了面向对象系统中一个重要的和重复出现的设计。 使用设计模式的目的:为了代码可重用性、让代码更容易被他人理解、保证代码可靠性。 设计模式使代码编写真正工程化;设计模式是软件工程的基石脉络,如同大厦的结构一样。 Christo...

图算法概论

1. 图的表示 图的表示法有两种,邻接表和邻接矩阵法,这两种方法既可以表示有向图也可以用于表示无向图。邻接表方法在稀疏的图中比较节省资源,但是邻接矩阵法在密度比较高的情况下比较好。 2. 搜索算法 搜索一个图示有序地沿着图的边访问所有的定点,图的搜索技术是图算法领域的核心 a. 广度优先搜索(Breadth-first search,BFS) 过程: 对...

HAProxy安装配置详解

简介 HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。 HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。 HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可...

.NET 配置文件简单使用

.NET 配置文件简单使用   当我们开发系统的时候要把一部分设置提取到外部的时候,那么就要用到.NET的配置文件了。比如我的框架中使用哪个IOC容器需要可以灵活的选择,那我就需要把IOC容器的设置提取到配置文件中去配置。实现有几种方法。 1.使用appSettings 这个是最简单的可以设置和读取的用户设置 程序中可以用key去读取: string o...

验证码识别,发票编号识别

update:排版 这个demo的初衷不是去识别验证码,是把验证的图像处理方式用到其他方面,车票,票据等。 这里最后做了一个发票编号识别的的案例: 地址:http://v.youku.com/v_show/id_XMTI1MzUxNDY3Ng==.html 源代码:https://github.com/ccccccmd/ReCapcha demo中包含一个...

单麦克风AI降噪模块及解决方案

前记   随着以AI为核心的智能设备的广泛发展,语音这个非常重要的入口一直是很多厂商争夺的市场。作为音频采集的前端设备,能采集到的距离远,清晰度高,无噪声的信号是一个非常重要的能力。这样就对音频前端降噪提出了新的需求,需要前端降噪更加智能化,更加深度化,更加低成本化。  面对市场的强劲需求和市场的不断变化,该团队在降噪算法领域经过多年的技术积累和沉淀,把降...