设计原则:开闭原则、依赖倒置原则、单一职责原则、接口隔离原则、迪米特法则(最少知道原则)、里氏替换原则、合成/复用原则(组合/复用原则)
开闭原则
开闭原则coding:
创建接口
创建实现类
主函数调用
查看IDEA中UML结构图
如果我们要添加一个打折功能的话
在实现类中具体实现该方法
但是这种方式还是存在很大的弊端,没有实现完美的解耦,这时候,去掉上面的修改,创建一个新的类
重写父类方法
我们可以看到运行后的结果打了8折
获取原价,从这里可以看到,我们完美的实现了解耦。
运行结果
当前UML结构图
总结来说:我们在添加需求的时候,只是添加在应用层添加类来实现,并没有动底层的任何一个类。这样就完美的实现了需求之间的解耦。提高了程序的可用性和复用性。
coding:
创建Geely对象,存在两个方法
在main方法中调用
如何需要添加学习新的课程就直接在Geely类上面添加
但是这种方式违背了依赖倒置原则,因为高层模块Test类需要调用方法的时候,却在底层模块Geely来添加方法
这时候我们创建一个接口,只是提供一个学习课程的方法,具体的实现由后面的来决定。
创建java课程类,来单独实现java课程学习方法
同理创建FECourse类来单独实现FE的课程方法
现在的话,我们将Geely类中之前的所有方法全部删掉
这样的话,对于具体要实现的课程直接交给高层模块来实现,底层模块相当于只是一个中转站。
重新修改主函数man方法
输出结果
查看当前UML类图
现在要添加一个学习课程方法就很简单了,只需要在添加一个类就可以实现了
这样的话只需要new出这个对象然后在调用这个方法就可以了。
运行结果
上面我们是通过调用方法来实现,现在我们也可以通过Geely的构造器来实现
去掉调用方法那里的产生,通过构造器来传入参数
main方法实现
这样的话也出现了一个问题,每创建一个课程对象就必须new一个geely对象。
当前UML类图
总结:我们可以看到在Geely类当中没有引入任何和课程有关的类,完全是一个单独的类,也就是说高层模块不依赖于低层模块,如果需要扩展只需要扩展底层模块类就可以了。 以抽象方式搭建的结构比你细节方式搭建的结构要稳定的多。其核心思想就是面向接口编程。
Java 面试宝典是大明哥全力打造的 Java 精品面试题,它是一份靠谱、强大、详细、经典的 Java 后端面试宝典。它不仅仅只是一道道面试题,而是一套完整的 Java 知识体系,一套你 Java 知识点的扫盲贴。
它的内容包括:
- 大厂真题:Java 面试宝典里面的题目都是最近几年的高频的大厂面试真题。
- 原创内容:Java 面试宝典内容全部都是大明哥原创,内容全面且通俗易懂,回答部分可以直接作为面试回答内容。
- 持续更新:一次购买,永久有效。大明哥会持续更新 3+ 年,累计更新 1000+,宝典会不断迭代更新,保证最新、最全面。
- 覆盖全面:本宝典累计更新 1000+,从 Java 入门到 Java 架构的高频面试题,实现 360° 全覆盖。
- 不止面试:内容包含面试题解析、内容详解、知识扩展,它不仅仅只是一份面试题,更是一套完整的 Java 知识体系。
- 宝典详情:https://www.yuque.com/chenssy/sike-java/xvlo920axlp7sf4k
- 宝典总览:https://www.yuque.com/chenssy/sike-java/yogsehzntzgp4ly1
- 宝典进展:https://www.yuque.com/chenssy/sike-java/en9ned7loo47z5aw
目前 Java 面试宝典累计更新 400+ 道,总字数 42w+。大明哥还在持续更新中,下图是大明哥在 2024-12 月份的更新情况:
想了解详情的小伙伴,扫描下面二维码加大明哥微信【daming091】咨询
同时,大明哥也整理一套目前市面最常见的热点面试题。微信搜[大明哥聊 Java]或扫描下方二维码关注大明哥的原创公众号[大明哥聊 Java] ,回复【面试题】 即可免费领取。