声明:本人设计模式模块是集合网上资料和老师课件总结的知识点,如本博客有侵权,本人即刻删。

设计模式(面向对象设计)原则,分别是:
1.开放封闭原则:对扩展开放,对修改关闭
2.单一职责原则:一个类只做一件事情
3.依赖倒转原则:采用接口编程
4.迪米特法则(最小知识原则):高内聚 、低耦合
5.接口隔离原则:细节接口
6.合成/聚合复用原则:避免使用继承
7.里氏代换原则:子类不能去修改父类的功能

1、开放封闭原则

概念:一个软件实体如类、模板、和函数应该对扩展开放、对修改关闭。模块应该在尽量不修改源代码的情况下进行扩展。
在软件周期内,因为变化、升级和维护等原因需要对软件原有代码进行修改时,可能会给代码引入错误,也可能会使我们不得不对整个功能进行重构,并且需要原有代码经过重新测试。当软件需求变化时,尽量通过扩展软件实体的行为来实现变化,而不是通过修改已有代码来实现变化。
开放封闭原则是面向对象设计的核心所在,遵循这个原则可以带来面向对象技术所声称的巨大好处,也就是可维护、可扩展、可复用、灵活性好。开发人员应该仅对程序中呈现的频繁变化的那些部分作出抽象。

2、单一职责原则

概念:就一个类而言,应该仅有一个引起它变化的原因。
当我们在做编程的时候,很自然的回个一个类加上各种各样的功能。这样意味着,无论任何需求要来,你都需要更改这个类,这样其实是很糟糕的,维护麻烦,复用不可能,也缺乏灵活性。如果一个类承担的职责过多,就等于把这些职责耦合起来,一个职责变化可能会削弱或者抑制这个类完成其他职责的能力。这种耦合会导致脆弱的设计,当变化发生时,设计会遭到很多意想不到的破坏。

3、依赖倒转原则

概念:依赖倒转原则是程序要依赖于抽象接口,不要依赖于具体实现。简单的来说就是要求对抽象进行编程,不要对实现进行编程,这样就降低了客户与实现模块的耦合。
有时候为了代码复用,一般会把常用的代码写成函数或类库。这样开发新项目的时候直接用就行了。比如做项目的时候大多要访问数据库,所以我们把访问数据库的代码写成了函数。每次做项目去调用这些函数。那么问题来了,我们要做新项目的时候,发现业务逻辑高层模块都是一样的,但客户却希望使用不同的数据库或存储方式,这时就出现了麻烦。我们希望能再次利用这些高层模块,但是高层模块都是与低层的访问数据库绑定在一起,没办法复用这些高层的模块。所以不管是高层模块和底层模块都应该依赖于抽象,具体一点就是接口或者抽象类,只要接口是稳定的,那么任何一个更改都不用担心。

4、迪米特法则(最小知识原则)

概念:一个软件实体应当尽可能的少与其他实体发生相互作用。一个软件单位对其他软件单位都只有最少的知识,而且局限于那些与本单位密切相关的软件单位。迪米特法则的初衷在于降低类之间的耦合。由于每个类尽量减少对其他类的依赖,因此,很容易使得系统的功能模块功能独立,相互之间不存在(或很少有)依赖关系。迪米特法则不希望类之间建立直接的联系。如果有真的需要建立联系的,也希望能通过他的友元类来转达。因此,应用迪米特法则有可能造成一个后果就是:系统中存在大量的中介类,这些类之所以存在完全是为了传递类之间的相互关系,这在一定程度上增加了系统的复杂度。

5、接口隔离原则

概念:客户端不应该依赖他不需要的接口,类间的依赖关系应建立在最小的接口上。
接口隔离原则的核心定义,不出现臃肿的接口,但是“小”是有限度的,首先就是不能违反单一职责原则。

6、合成/聚合复用原则

概念:合成/聚合复用原则经常又叫做合成复用原则,就是在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分,新的对象通过这些对象的委派达到复用已有功能的目的。他的设计原则是:要尽量使用合成/聚合,尽量不要使用继承。

7、里氏代换原则

概念:里氏代换原则是面向对象设计的基本原则之一。即任何基类可以出现的地方,子类一定可以出现。里氏代换原则是继承复用的基石,只有当衍生类可以替换掉基类,软件单位的功能不受影响时,基类才能被真正复用,而衍生类也能够在积累的基础上增加新的行为,里氏代换原则是对“开-闭”原则的补充。实现“开-闭”原则的关键步骤就是抽象化。在基类与子类的继承关系就是抽象化的具体实现,所以里氏代换原则是对实现抽象化的具体步骤的规范。
当满足继承的时候,父类肯定存在非私有的成员,子类肯定是得到了父类的这些非私有成员(假设,父类的成员全部是私有的,那么子类没办法从父类继承任何成员,也就不存在继承的概念了)。既然子类继承了父类的这些非私有成员,那么子类对象也就可以在父类对象中调用这些非私有成员。所以,子类对象可以替换父类对象的位置。
在里氏带环原则下,当需求有变化时,只需继承,而别的东西不会改变。由于里氏代换原则才使得开放封闭称为可能。这样使得子类在父类无需修改的情况下就可以扩展。

设计模式(面向对象)设计的七大原则相关推荐

  1. 深入理解面向对象设计的七大原则

    一.面向对象设计的七大原则是什么? 1.开放封闭原则 2.里氏转换原则 3.依赖倒转原则 4.组合/聚合原则 5.接口隔离原则 6."迪米特"法则 7.单一职责原则 二.七大原则是 ...

  2. 面向对象设计的七大原则 (包括SOLID原则)

    文章目录 概述 1. 单一原则 2. 里氏替换原则 3. 依赖倒转原则 4. 接口分隔原则(Interface Segregation Principle ,ISP) 5. 迪米特法则 (Law of ...

  3. 设计模式 - 软件设计的七大原则

    文章目录 前言 1. 软件设计模式原则 2. 开闭原则 1. 概念 2. 例子 3. 里氏替换原则 1. 概念 2. 例子 4. 依赖倒置原则 1. 概念 2. 代码 5. 单一职责原则 说明 6. ...

  4. 面向对象设计的七大原则

    面向对象设计原则简介 常用的面向对象设计原则包括7个,这些原则并不是孤立存在的,它们相互依赖,相互补充. 设计原则名称 设计原则简介 单一职责原则(Single Responsibility Prin ...

  5. 02 面向对象设计的七大原则

    面向对象的设计原则 软件的可维护性和可复用性是用于衡量软件质量的质量属性,软件的可维护性是指软件能够被理解.改正.适用以及扩展的难易程度,软件的可复用性是指软件能够被复用的难易程度. 1> 开闭 ...

  6. solid 设计原则 php,面向对象设计SOLID五大原则

    今天我给大家带来的是面向对象设计SOLID五大原则的经典解说. 我们知道,面向对象对于设计出高扩展性.高复用性.高可维护性的软件起到很大的作用.我们常说的SOLID五大设计原则指的就是: S = 单一 ...

  7. 软件架构设计_架构师内功心法,软件架构设计的七大原则精选案例

    一.软件架构设计的七大原则简介 1.1 开闭原则(Open-Closed Principle,OCP) 开闭原则是一个软件实体如类.模块和函数应该对扩展开放,对修改关闭.所谓的开闭也是对扩展和修改两个 ...

  8. PHP面向对象设计的五大原则

    面向对象设计的五大原则:单一职责原则.接口隔离原则.开放-封闭原则.替换原则.依赖倒置原则.这些原则主要是由Robert C.Martin在<敏捷软件开发--原则.方法.与实践>一书中总结 ...

  9. java中高级面试_中高级面试常问:Java面向对象设计的六大原则

    这篇文章主要讲的是面向对象设计中,我们应该遵循的六大原则.只有掌握了这些原则,我们才能更好的理解设计模式.我们接下来要介绍以下6个内容.单一职责原则--SRP 开闭原则--OCP 里式替换原则--LS ...

最新文章

  1. leetCode刷题 2. 两数相加
  2. formal method里面的并发问题
  3. 【Linux】一步一步学Linux——expr命令(265)
  4. P3891-[GDOI2014]采集资源【背包,dp】
  5. java依赖_java 依赖、组合、聚合与继承
  6. 搞不清FastCgi与PHP-fpm之间是个什么样的关系
  7. 测试开发岗面试,需要准备的100道题型
  8. 剖析锂电池的工作原理
  9. 【卷积神经网络】感受野
  10. pgAdmin4 汉化
  11. Rolan 1.3.8 屏蔽强制更新
  12. 采用Fuel Gauge可能出现的几种电量现象及解释
  13. 长短视频平台内卷自制剧,网剧制作商耐看娱乐能“耐看”吗?
  14. OpenCV4萌新之路——详解图像读取函数 “imread”
  15. office2016下安装Mathtype之后显示DLL找不到的问题
  16. linux用户日志在哪里看,Linux用户登录记录日志和相关查看命令汇总
  17. 【数据结构-矩阵】矩阵的相关公式推导
  18. 2022-2028全球与中国360度投影系统市场现状及未来发展趋势
  19. 信息与计算科学有哪些SCI期刊推荐? - 易智编译EaseEditing
  20. 修改文件权限chown/chgrp/chmod【Linux】

热门文章

  1. 4.编程打印一个二维数组中所有元素的和,并打印最大值,最小值(以及它们所在的行号和列号)
  2. 痛与快乐有一个代码是什么_养一只真大型犬的生活是什么样的?铲屎官:痛并快乐着!...
  3. MFC 基础知识:对话框背景添加图片和按钮Button添加图片
  4. iOS之深入解析Block的使用和外部变量捕获
  5. 【数据结构与算法】之深入解析“复原IP地址”的求解思路与算法示例
  6. 【数据结构与算法】之深入解析“最小覆盖子串”的求解思路与算法示例
  7. iOS之深入解析预乘透明度Premultiplied Alpha
  8. LeetCode Algorithm 572. 另一棵树的子树
  9. 2015/Province_C_C++_C/9/打印大X
  10. 2013\National _C_C++_A\2.骰子迷题