设计模式01-设计原则
开闭原则
对新增开放,对修改关闭
开闭原则的使用方式
- 面向接口编程:定义清晰的接口,通过接口来定义方法,实现类实现接口,通过接口来调用方法。
- 抽象层编程:通过抽象层来定义方法,实现类实现抽象层,通过抽象类的子类来实现功能。
依赖倒置原则
依赖于抽象方法,而不是具体实现
主要内容:
- 高层模块不应该依赖底层模块,两者都应该依赖抽象
- 抽象不应该依赖细节
- 细节应该依赖抽象
单一职责原则
每个类只处理单一职责的内容
单一职责的优点:
- 提高了类的可读性和可维护性
- 增加了类的可复用性
接口隔离原则
用多个专门的接口而不是一个综合的接口
特征:
是将接口拆分的足够小,确保接口之间的关系尽量的松散。
使用的场景:
- 对大型的接口进行拆分:使接口更加具体,拆分出核心业务,非核心业务进行剥离,分拆为其他接口
- 预防胖接口:考虑到接口的职责单一的程度,避免接口中有过多职责方法
迪米特法则
一个对象应该减少对其他对象的依赖
强调的是类之间的松耦合
特征:
- 两个类不直接调用通信,而是通过中间类进行调用。
- 一个类对自己依赖的类知道的越少越好,只与中间类通信。
里氏替换原则
子类可以扩展父类的功能,不能替换父类非抽象的方法
要遵守的原则:
- 方法重写:子类的入参要比父类的更宽松,出参要要比父类的更严格。
- 继承:子类可以实现父类的抽象方法,但是不能覆盖父类的非抽象方法。
优点:
- 提高代码的复用性
- 提高了代码的可扩展性
- 提高了代码的可维护性
缺点:
- 子类对父类的约束,限制了子类的功能扩展能力。
合成复合原则
合成复合原则,也成为聚合复用原则,是指尽量使用对象组合/聚合,而不是继承关系达到软件复用的目的。
组合:类与类之间的HAS-A关系,是一种强依赖关系,体现了严格的部分和整体的关系,部分和整体的生命周期一样。
聚合:类与类是部分与整体的关系,是一种弱依赖关系,体现了对象之间的A HAS-A B的关系。
继承:类与类之间的IS-A关系,强耦合关系
为什么不适用继承而使用组合/聚合的形式?
那么首先我们要看,使用继承的方式,会导致两个问题:
- 灵活性差:如果要使用某个新的功能,必须通过修改源代码来实现,这违背了开闭原则。
- 耦合度高:继承会将父类的实现细节暴露给子类,子类和父类的耦合度高,这也违背了单一职责原则。
使用组合/聚合的方式有什么好处呢?
- 灵活性高:通过组合/聚合,可以在运行时动态地添加或删除功能,而不需要修改源代码。
- 耦合度低:组合/聚合可以将功能分解为多个独立的对象,每个对象只负责一个功能,降低了类之间的耦合度。
- 可复用性高:通过组合/聚合,可以将已有的功能组合在一起,形成新的功能,提高了代码的复用性。
- 可扩展性好:通过组合/聚合,可以在运行时动态地添加或删除功能,而不需要修改源代码,提高了代码的可扩展性。
- 可维护性好:通过组合/聚合,可以将功能分解为多个独立的对象,每个对象只负责一个功能,降低了类之间的耦合度,提高了代码的可维护性。
- 可测试性高:通过组合/聚合,可以将功能分解为多个独立的对象,每个对象只负责一个功能,降低了类之间的耦合度,提高了代码的可测试性。
分类:
JAVA基础 / 设计模式
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示