2023-02-22  阅读(28)
原文作者:键盘林 原文地址:https://blog.csdn.net/qq_37909508/category_8976362.html

设计原则:开闭原则、依赖倒置原则、单一职责原则、接口隔离原则、迪米特法则(最少知道原则)、里氏替换原则、合成/复用原则(组合/复用原则)

开闭原则

202302222056417821.png

开闭原则coding:

创建接口

202302222056429492.png

创建实现类

202302222056437853.png

主函数调用

202302222056452034.png

查看IDEA中UML结构图

202302222056462455.png

如果我们要添加一个打折功能的话

202302222056479806.png

在实现类中具体实现该方法

202302222056488187.png

但是这种方式还是存在很大的弊端,没有实现完美的解耦,这时候,去掉上面的修改,创建一个新的类

202302222056498278.png

重写父类方法

202302222056507129.png

我们可以看到运行后的结果打了8折

2023022220565158310.png

获取原价,从这里可以看到,我们完美的实现了解耦。

2023022220565268611.png

运行结果

2023022220565362012.png

当前UML结构图

2023022220565461613.png

总结来说:我们在添加需求的时候,只是添加在应用层添加类来实现,并没有动底层的任何一个类。这样就完美的实现了需求之间的解耦。提高了程序的可用性和复用性。

2023022220565580514.png

coding:

创建Geely对象,存在两个方法

2023022220565768415.png

在main方法中调用

2023022220565869416.png

如何需要添加学习新的课程就直接在Geely类上面添加

2023022220565972417.png

但是这种方式违背了依赖倒置原则,因为高层模块Test类需要调用方法的时候,却在底层模块Geely来添加方法

这时候我们创建一个接口,只是提供一个学习课程的方法,具体的实现由后面的来决定。

2023022220570069418.png

创建java课程类,来单独实现java课程学习方法

2023022220570135019.png

同理创建FECourse类来单独实现FE的课程方法

2023022220570217320.png

现在的话,我们将Geely类中之前的所有方法全部删掉

2023022220570305021.png

这样的话,对于具体要实现的课程直接交给高层模块来实现,底层模块相当于只是一个中转站。

2023022220570365222.png

重新修改主函数man方法

2023022220570452323.png

输出结果

2023022220570566624.png

查看当前UML类图

2023022220570662625.png

现在要添加一个学习课程方法就很简单了,只需要在添加一个类就可以实现了

2023022220570743026.png

这样的话只需要new出这个对象然后在调用这个方法就可以了。

2023022220570810227.png

运行结果

2023022220570901028.png

上面我们是通过调用方法来实现,现在我们也可以通过Geely的构造器来实现

去掉调用方法那里的产生,通过构造器来传入参数

2023022220570984729.png

main方法实现

2023022220571084230.png

这样的话也出现了一个问题,每创建一个课程对象就必须new一个geely对象。

2023022220571257831.png

2023022220571351532.png

当前UML类图

2023022220571503133.png

总结:我们可以看到在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] ,回复【面试题】 即可免费领取。

阅读全文