面向对象——简单工厂模式

问题

编写一个计算器程序,实现所需要的功能,先实现最基本的四则加减运算(可完全按照 Windows 自带的计算器来做)

分析

初次分析

这个问题不简单吗?我一个 switch 语句打天下

如果你在 Java 语言课程的期末考试这么做,老师可能会给你这题的分数,因为你已经实现了题目的要求,但是如果你在公司面试的时候这么做,嘿嘿嘿……
面试官会非常高兴的告诉你:“请您等待我们的录取通知”

再次思考问题

为什么会造成这样的结果呢?我明明已经实现了要求啊!

因为实际开发的过程中,不只是需要达到相应的效果,而且还需要方便后期的维护

???我把这个功能写进一个函数里面不是挺好的?

如果其中某一个运算(例如加法)出现了问题,那我是不是就需要更改整个业务代码?如果整个业务流程的代码多了起来,成百上千行的代码,怎么能改的过来呢?

正确的做法

那你说,正确的做法应该是什么样的?

把一个运算符拆分成一个类,加法是一个类,减法是一个类,乘法是一个类,除法是一个类,这样做的话,如果后面需要添加其他的数学运算,比如幂次方,开根号等等,只需要添加一个类即可

代码的耦合度

这里正好涉及到了一个叫做耦合度的概念:说白了,就是代码之间的粘合性,比如刚刚提到的,如果把计算器功能写成一个函数的话,后期要是有什么需要改动的,需要对整个函数进行操作,各个部分的关联性很高,牵一发而动全身这就是高耦合度,如果把每个运算分割成一个单独的类,则可以降低耦合度,就像对加法运算进行更改不会影响除法运算

例如原来的计算器不支持高精度计算,最多支持的数据长度只能是 long long 类型,现在我将这个功能进行重写,增加对加法的高精度运算,但是,很不幸,我写错了,没有达到预期的效果,反而还出错了

这个时候,分割成一个个类的优势就出来了,现在只会影响到加法的运算,而不会影响到其他的运算,如果没有这么写,不只是加法崩溃了,其他运算也会崩溃掉

所以,开发过程中,代码总是向着降低耦合度的方向去的

简单工厂模式

工厂模式就是降低耦合度的一种设计模式

专门写一个类进行全局控制,其他的功能单独写成一个类

这就像加工厂把其他供应商提供的原材料进行加工,如果哪个供应商的原材料出了问题,那么这个问题应该由相应的供应商解决,跟加工厂无关,如果加工厂需要引进新的生产线,那么只需要加工厂做出相应的内部改变,并且增加相应原材料的供应商即可

所以,按照这种模式来写代码,如果需要增加新的功能,应该在哪加?

全局控制类中!

如果某个功能出了问题,应该怎么办?

检查负责实现这个功能的那个类!

只检查那个类就够了吗?

绝对够!因为其他功能和他无关

所以,就是这么回事

总结

原来代码之间的关系是这样(左边)

在这里插入图片描述

使用了这个设计模式之后是这样(右边)

从一家独大变成了分工合作,即使这个六边形战士的能力再强,也不一定比分工合作的厉害吧?俗话说:三个臭皮匠顶个诸葛亮

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值