软件设计7大原则学习之——开闭原则,以及开闭原则coding

在这里插入图片描述生活中的例子:

很多互联网公司都是弹性质工作:每天工作8小时,对每天工作8小时这个制度修改是关闭的,但是对于什么时候来,什么时候走制度是开放的,早点来早点走,晚点来晚点走,前提是干嘛8小时工作。

软件开发最重要的原则:对修改关闭,对扩展开放,开闭原则是其他原则的基础

下面使用代码来讲解:

使用慕课网的例子来讲解

1、先定义一个课程的接口:
在这里插入图片描述2、再定义一个Java课程JavaCourse类,实现课程接口ICourse
在这里插入图片描述3、测试类:
在这里插入图片描述在这里插入图片描述下面是UML类图(IDEA真神器也):
在这里插入图片描述假设1024这一天,慕课网有活动了,需要给课程进行打折,怎么来开发这个需求呢?

我们是不是可以在ICouse这个接口中增加这样一个打折的方法呢?
在这里插入图片描述如果我们这样增加,那么JavaCouse这个类也要进行修改
在这里插入图片描述虽然可以修改,但是有没有想过一个,就是接口一改,那么实现这个接口的所有类都需要修改,我们知道有的课程是不需要打折的,而且修改接口一定要慎重又慎重的,因为它是稳定可靠的一个标准,一个协议。

所以我們換另外一種思路:
在这里插入图片描述我们不是1024要打折课程吗?那我们给打折的课程返回价格的方法这样修改就行了,但是这样确实可以获取打折的价格,但是原来的价格怎么办呢?如果课程多岂不是我们要修改很多的类。
解决:

我们可以这样:定义一个打折的类JavaDiscountCourse去继承我们要打折的那个类JavaCourse
在这里插入图片描述在这里插入图片描述我们来看现在UML的关系图:
在这里插入图片描述我们可以看到我们的接口ICourse没有改变,JavaCourse也没有改变,我们修改的是应用层的代码,底层的代码我们是并没有修改的,这样可以很好的防止风险的扩散,因为在开发中的接口是有很多的方法,类中也是有很多的方法,我们轻易修改可能会造成系统的混乱的,越底层的模块影响越大,越高层的变化影响越小。
使用一个类去继承原有的类,很好的满足了设计原则的开闭原则,对
修改的关闭,对扩展的开放。
这里让我联想到,使用MyBatis-逆向工程生成的pojo、mapper文件,因为只能对单表操作,当我们需要多表联查的时候,就需要自己写条件,特别是Pojo实体类中,还可能包含其他实体类,这时候我们不建议直接修改MyBatis-逆向工程直接生成的那个Pojo实体类,而是使用一个类去继承它,去扩展它就行了。

在这里插入图片描述当然了,可能有人会说,我们关联查询需要自己手写Mapper映射文件里面的查询操作,这也涉及到了接口绑定对应的接口,不是也涉及到修改接口了吗?
在这里插入图片描述在这里插入图片描述不是说开闭原则不能进行修改吗?
是的,没错,但是我们知道规则是人定的,我们一味的遵守规则那也是不好的,要得懂得灵活的变通,这里接口和映射文件是绑定在一起的,除了它俩就没有其他的关联,我们也是可以违反一下规则的嘛,就和现实生活中一样。

总结:关于开闭原则,我现在理解还是不够全灭,还是得多实践,多思考,以后有扩充内容再补充吧。
————小白成长之路

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值