设计模式01-设计原则

开闭原则

对新增开放,对修改关闭

开闭原则的使用方式

  • 面向接口编程:定义清晰的接口,通过接口来定义方法,实现类实现接口,通过接口来调用方法。
  • 抽象层编程:通过抽象层来定义方法,实现类实现抽象层,通过抽象类的子类来实现功能。

依赖倒置原则

依赖于抽象方法,而不是具体实现

主要内容:

  • 高层模块不应该依赖底层模块,两者都应该依赖抽象
  • 抽象不应该依赖细节
  • 细节应该依赖抽象

单一职责原则

每个类只处理单一职责的内容

单一职责的优点:

  • 提高了类的可读性和可维护性
  • 增加了类的可复用性

接口隔离原则

用多个专门的接口而不是一个综合的接口

特征:
是将接口拆分的足够小,确保接口之间的关系尽量的松散。

使用的场景:

  • 对大型的接口进行拆分:使接口更加具体,拆分出核心业务,非核心业务进行剥离,分拆为其他接口
  • 预防胖接口:考虑到接口的职责单一的程度,避免接口中有过多职责方法

迪米特法则

一个对象应该减少对其他对象的依赖
强调的是类之间的松耦合
特征:

  • 两个类不直接调用通信,而是通过中间类进行调用。
  • 一个类对自己依赖的类知道的越少越好,只与中间类通信。

里氏替换原则

子类可以扩展父类的功能,不能替换父类非抽象的方法
要遵守的原则:

  • 方法重写:子类的入参要比父类的更宽松,出参要要比父类的更严格。
  • 继承:子类可以实现父类的抽象方法,但是不能覆盖父类的非抽象方法。

优点:

  • 提高代码的复用性
  • 提高了代码的可扩展性
  • 提高了代码的可维护性

缺点:

  • 子类对父类的约束,限制了子类的功能扩展能力。

合成复合原则

合成复合原则,也成为聚合复用原则,是指尽量使用对象组合/聚合,而不是继承关系达到软件复用的目的。

组合:类与类之间的HAS-A关系,是一种强依赖关系,体现了严格的部分和整体的关系,部分和整体的生命周期一样。

聚合:类与类是部分与整体的关系,是一种弱依赖关系,体现了对象之间的A HAS-A B的关系。

继承:类与类之间的IS-A关系,强耦合关系

为什么不适用继承而使用组合/聚合的形式?

那么首先我们要看,使用继承的方式,会导致两个问题:

  • 灵活性差:如果要使用某个新的功能,必须通过修改源代码来实现,这违背了开闭原则。
  • 耦合度高:继承会将父类的实现细节暴露给子类,子类和父类的耦合度高,这也违背了单一职责原则。

使用组合/聚合的方式有什么好处呢?

  • 灵活性高:通过组合/聚合,可以在运行时动态地添加或删除功能,而不需要修改源代码。
  • 耦合度低:组合/聚合可以将功能分解为多个独立的对象,每个对象只负责一个功能,降低了类之间的耦合度。
  • 可复用性高:通过组合/聚合,可以将已有的功能组合在一起,形成新的功能,提高了代码的复用性。
  • 可扩展性好:通过组合/聚合,可以在运行时动态地添加或删除功能,而不需要修改源代码,提高了代码的可扩展性。
  • 可维护性好:通过组合/聚合,可以将功能分解为多个独立的对象,每个对象只负责一个功能,降低了类之间的耦合度,提高了代码的可维护性。
  • 可测试性高:通过组合/聚合,可以将功能分解为多个独立的对象,每个对象只负责一个功能,降低了类之间的耦合度,提高了代码的可测试性。
posted @   PerfectLi  阅读(2)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
点击右上角即可分享
微信分享提示