几张图带你手拿把掐设计模式六大原则

简介: 几张图带你手拿把掐设计模式六大原则

afc41791936e85a155378c6b41dc0818_1a52d1fe23904cd0bc4b5645ef340b2c.gif


🌟单一职责原则


  • 核心思想:任何一个软件模块中,应该有且只有一个被修改的原因。
  • 例子描述:功能性函数全都放到一个Service类里面,违反了单一职责原则。
  • 优点:职责越单一,被修改的原因就越少,类的复杂度降低、可读性提高、可维护性提高、扩展性提高、降低了变更引起的风险。
  • 缺点:如果类一味追求单一职责,有时会造成类的大爆炸,不过接口和方法肯定要遵循这个原则。
  • 注意:单一职责原则提出了一个编写程序的标准,用“职责”或“变化原因”来衡量接口或类设计得是否优良,但是“职责”和“变化原因”都是不可以度量的,因项目和环境而异。


🌟依赖倒置原则


  • 核心思想:高层模块不应该依赖底层模块,二者都该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象。
  • 说明:高层模块就是调用端,低层模块就是具体实现类。抽象就是指接口或抽象类。细节就是实现类。
  • 通俗来讲:依赖倒置原则的本质就是通过抽象(接口或抽象类)使个各类或模块的实现彼此独立,互不影响,实现模块间的松耦合。模块之间交互应该依赖抽象,而非实现。
  • 优点:大幅提高了可扩展性,降低耦合度,使代码层次更加清晰。

如果要切换数据库

DbService dbService = new MysqlService(); //改成NoSqlService, OracleService即可

🌟开闭原则


  • 核心思想:软件实体应该对扩展开放,对修改关闭。
  • 说明:对扩展开放,意味着有新的需求或变化时,可以对现有代码进行扩展以适应新的情况。对修改关闭,意味着类的设计一旦完成,就可以独立完成工作,而不要对其进行任何修改。


🌟接口隔离原则


  • 核心思想:多个特定的接口要好于一个宽泛用途的接口
  • 通俗来讲:建立单一接口,不要建立庞大臃肿的接口,尽量细化接口,接口中的方法尽量少。也就是说,我们要为各个类建立专用的接口,而不要试图去建立一个很庞大的接口供所有依赖它的类去调用。
  • 优点:将外部依赖减到最少。你只需要依赖你需要的东西。这样可以降低模块之间的耦合。
  • 注意:
  • 接口尽量小,但是要有限度。对接口进行细化可以提高程序设计灵活性,但是如果过小,则会造成接口数量过多,使设计复杂化。所以一定要适度。
  • 提高内聚,减少对外交互。使接口用最少的方法去完成最多的事


🌟迪米特法则(Law of Demeter)


  • 核心思想:一个实体应当尽量少地与其他实体之间发生相互作用,使得系统功能模块相对独立。

注意:

  • 第一: 从被依赖者的角度来说:只暴露应该暴露的方法或者属性。
  • 第二: 从依赖者的角度来说:只依赖应该依赖的对象。

🌟里氏替换原则


  • 核心思想:程序中的父类型都应该可以正确地被子类替换。
  • 原理:继承复用的基石,只有当子类可以替换掉父类,且软件的功能不受到任何影响时,父类才能真正被复用,而子类也能够在父类的基础上增加新的行为。
  • 通俗来讲:只要有父类出现的地方,都可以使用子类来替代。子类出现的地方,不能使用父类来替代。例如:我喜欢动物,那我一定喜欢狗,因为狗是动物的子类;但是我喜欢狗,不能据此断定我喜欢动物,因为我并不喜欢老鼠,虽然它也是动物。
  • 优点:代码共享,减少创建类的工作量。提高代码的重用性,可扩展性。
  • 缺点:继承是侵入性的。只要继承,就必须拥有父类的所有属性和方法;增强了耦合性。当父类的常量、变量和方法被修改时,需要考虑子类的修改
  • 注意:如果子类不能完整地实现父类的方法,或者父类的某些方法在子类中已经发生“畸变”,则建议断开父子继承关系 采用依赖、聚合、组合等关系代替继承。
  • 最佳实践:我们最好将父类定义为抽象类,并定义抽象方法,让子类重新定义这些方法,当父类是抽象类时候,父类不能实例化。

🌟总结


  1. 单一职责原则:提高代码实现层的内聚度,降低实现单元彼此之间的耦合度
  2. 开闭原则:提高代码实现层的可扩展性,提高面临改变的可适应性,降低修改代码的冗余度
  3. 里氏替换原则:提高代码抽象层的可维护性,提高实现层代码与抽象层的一致性
  4. 接口隔离原则:提高代码抽象层的内聚度,降低代码实现层与抽象层的耦合度,降低代码实现层的冗余度
  5. 依赖倒置原则:降低代码实现层由依赖关系产生的耦合度,提高代码实现层的可测试性
  6. 迪米特法则:一个对象应该对其他对象保持最少的了解。尽量降低类与类之间的耦合。

目录
相关文章
|
4月前
|
设计模式
设计模式七大原则
这篇文章介绍了设计模式中的七大原则,特别强调了单一职责原则,即一个类应该只有一个引起其行为变化的原因,以确保类功能的高内聚和低耦合。
|
4月前
|
设计模式 存储 前端开发
React开发设计模式及原则概念问题之自定义Hooks的作用是什么,自定义Hooks设计时要遵循什么原则呢
React开发设计模式及原则概念问题之自定义Hooks的作用是什么,自定义Hooks设计时要遵循什么原则呢
|
6月前
|
设计模式 供应链
设计模式六大原则之迪米特法则
设计模式六大原则之迪米特法则
|
6月前
|
设计模式
设计模式六大原则之依赖倒置原则
设计模式六大原则之依赖倒置原则
|
3月前
|
设计模式 Java 关系型数据库
设计模式——设计模式简介和七大原则
设计模式的目的和核心原则、单一职责原则、接口隔离原则、依赖倒转原则、里氏替换原则、开闭原则、迪米特法则、合成复用原则
|
4月前
|
设计模式 算法 开发者
设计模式问题之最小知识原则(迪米特法则)对代码设计有何影响,如何解决
设计模式问题之最小知识原则(迪米特法则)对代码设计有何影响,如何解决
|
4月前
|
设计模式 前端开发 JavaScript
React开发设计模式及原则概念问题之什么是HOC(Higher-order component),HOC遵循的设计原则都有哪些
React开发设计模式及原则概念问题之什么是HOC(Higher-order component),HOC遵循的设计原则都有哪些
|
4月前
|
设计模式 前端开发 JavaScript
React开发设计模式及原则概念问题之什么是设计模式,单一职责原则如何理解
React开发设计模式及原则概念问题之什么是设计模式,单一职责原则如何理解
|
6月前
|
设计模式 uml
设计模式学习心得之前置知识 UML图看法与六大原则(下)
设计模式学习心得之前置知识 UML图看法与六大原则(下)
46 2
|
6月前
|
设计模式 Java 数据库
深入理解设计模式六大原则
深入理解设计模式六大原则