首页 > 其他 > 详细

设计模式的七大原则

时间:2020-08-15 23:05:31      阅读:80      评论:0      收藏:0      [点我收藏+]

设计模式,是为了让程序(软件),具有更好的代码重用性、可读性、可扩展性、可靠性,使程序呈现高内聚、低耦合的特性。

  • 代码重用性:相同功能的代码,不用多次编写
  • 可读性:编程规范性,便于阅读和理解
  • 可扩展性(可维护性):添加新功能时非常方便。
  • 可靠性:当我们添加新功能后,对原来的功能没有影响。
  • 内聚:模块或关注点内部的一系列相关功能的相关程度的高低。越高越好。
  • 耦合:用来度量模块与模块直接的依赖关系。越低越好。

设计模式原则,其实就是在编写程序时应当遵守的基本原则,也是各种设计模式的基础(设计模式为什么这样设计的依据)。

一、单一职责原则

  • 概念:一个类只负责一项职责
  • 举例:查询表的业务,订单负责订单,产品负责产品。
  • 目的:降低变更引起的麻烦和风险,提高代码的可维护性。
  • 使用:除非逻辑真的非常简单,否则所有类都应该遵守该原则。

二、接口隔离原则

  • 概念:一个类对另一个类的依赖必须建立在最小接口上。
  • 理解:一个类所依赖的接口应该是这样的,这个接口里的方法这个类都用得上,而不是只用其中一部分。最小接口指的就是将若干方法分割,使每个接口里的方法都对于继承它的类来说完全有用。隔离指的就是将一个接口的若干方法分配到不同的接口中。
  • 目的:使类之间的结构更清晰

三、依赖倒转(倒置)原则

  • 背景:因为细节易变,抽象的东西更稳定,所以以抽象为基础搭建的架构比以细节搭建的架构要稳定的多。可以通过抽象定义规范,把细节任务交给实现类去发挥。
  • 概念:高层模块不应该依赖底层模块,二者都应该依赖其抽象;抽象不应该依赖细节,细节应该依赖抽象。
  • 理解:在语言中,这个原则可以这样理解:模块间的依赖关系通过抽象(即接口、抽象类)发生,实现类之间不发生直接的依赖关系;抽象类或接口不依赖于实现类,实现类依赖于抽象类或接口。也就是,面向接口编程。
  • 使用:变量的声明类型尽量是接口或抽象类。

 

  • 依赖关系传递的三种方式:
    • 比如:小明读书这件事,将书抽象成一个接口Book,将小明抽象为一个读者类Reader,将阅读行为抽象为接口Book和类Reader中的方法“read”。
    • 接口传递:由小明去阅读,将书作为参数,传给read(Book book),进而调用book.read。
    • 构造函数:将书book作为Reader的成员变量,在构造小明的时候将书作为构造器的参数传入,通过调用book.read()。
    • setter:将书book作为Reader的成员变量,创建小明后,调用setter将参数赋值给成员变量book,进而调用book.read()。

四、里氏替换原则

  • 背景:继承给程序设计带来便利,可以提高代码的重用性,减少工作量,但是也给程序设计带来弊端,比如会给程序带来入侵性,增加对象间的耦合性。在编程中,要正确的使用继承,就要遵守里氏替换原则。
  • 概念:所有引用基类的地方必须能够透明地使用其子类对象。
  • 理解:透明指的是基类和子类的同一个方法行为应该相同,不会在多态频繁的时候降低复用性。这就要求我们尽量不要重写父类中的方法,如果一定要重写的话,最好取消继承,用组合、依赖、聚合等关系代替。

五、开闭原则

  • 背景:开闭原则是编程中最基础、最重要的原则。前面的原则都是为了实现开闭原则的效果。
  • 概念:一个软件实体,如类、模块、函数等部分,应该是对扩展开放、对修改关闭的。用抽象构建框架,用实现扩展细节。
  • 理解:对于程序方来说,当软件需要变化时,应该是通过扩展代码而不是修改原有代码来达成。

六、迪米特原则

  • 概念:
    • 又叫最小知道法则,即一个类对于自己依赖的类知道的越少越好。也就是说,不管依赖的类多么复杂,都要尽量将它的成员变量、方法封装到其类里,只对外提供public方法就可以了
    • 另一种理解:只和直接朋友通信。直接朋友是指被依赖的类B出现在了类A的成员变量、方法参数、返回值里,就称A是B的朋友。
  • 目的:降低类之间的耦合性。注意,只是要求降低,不是要完全消灭彼此之间的耦合性。

七、合成复用原则

  • 背景:如果类A中有两个方法,类B想使用这两个方法,一般最容易想到的就是B继承A,就可以使用这两个方法了。但是,这种关系会使得耦合性增强,仅仅是为了使用另一个类的方法就使用继承关系是很不合算的。最好用别的关系替代。
  • 概念:尽量使用合成/聚合的方式,而不是继承

 

总结:

以上七个原则的核心思想一致:

  • 找出应用中的可能需要变化之处,将它们独立出来,不要和不变的混在一起;
  • 针对接口编程,而不是针对实现编程;
  • 为了交互对象的松耦合而努力。

单一职责原则、接口隔离原则、依赖倒转规则这三个原则针对面向接口编程,通过接口使类之前的复用结构和抽象结构更清晰。

里氏替换原则是针对继承关系

开闭原则是针对扩展性

迪米特原则、合成复用原则这两个原则是降低耦合性

 

设计模式的七大原则

原文:https://www.cnblogs.com/chitangyu/p/13510410.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!