java设计模式之设计原则①开闭原则

定义:一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。
强调的是用抽象构建框架,用实现扩展细节。
优点:提高软件系统的可复用性及可维护性

例如:
在这里插入图片描述
创建一个Course接口
获取id方法
获取name方法
获取price方法
在这里插入图片描述
创建一个JavaCourse类实现Course接口
设置三个属性
Integer id
String name
Double price
创建一个满参的构造函数
修改重写的三个方法的返回值
在这里插入图片描述
创建一个Test测试类
创建一个JavaCourse类,赋予属性
直接输出这个对象的属性

可以在idea编辑器中右键包选择
在这里插入图片描述
查看类图关系
在这里插入图片描述
比如说现在有一个需求,关于价格有个打8折活动,我们在此基础上在更改接口的话,所有的实现类中的方法都要重写这个方法,如果实现类少的话还可以接受,但是我们的接口是不可以经常变化的,应该是稳定可靠的,否则这个作用也就失去了。
解决方案:我们在写一个JavaDiscountCourse类去继承JavaCourse类,然后去重写父类的getPrice()价格方法,如下图
在这里插入图片描述
修改test类 创建的是子类对象(new JavaDiscountCourse)
在这里插入图片描述
这样就可以更好的去扩展并且展示出了打折后的价格
在这里插入图片描述
但是呢如果需要展示原价格的话又要怎么去做呢?
在子类中定义一个方法getOriginPrice() 去获取原价格
在这里插入图片描述
但是我们发现在test中他调用不到定义的获取原价格的方法
在这里插入图片描述
虽然定义的是public方法,当时因为我们在test类中使用父类声明的引用,所以他拿不到public方法
所以我们需要将其类型进行强转
在这里插入图片描述
这样我们就可以调用定义的获取原价格的方法了
在这里插入图片描述
类图如下
在这里插入图片描述
总结:开闭原则在这里指的是 对于扩展是开放的,而对修改接口和基类是关闭的
我们变化的都是应用层的子模块,越是底层(基础)的模块进行更改,变化(影响)是越大的,越是高层的模块更改,变化 影响的范围会越小。
简单的理解:比如说我们的Dao层变化了,而这个Dao层被很多service使用,而在上层是controller,那这个影响就非常大,有可能我们为了改一个模块影响到另一个模块,所以说我们在面向对象编程的时候,一定强调开闭原则,其他原则也都是开闭原则的具体形态,提高了复用性和可维护性,因为我们在公司并不是一个人开发,我们要考虑软件的维护成本。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值