设计模式(面向对象)设计的七大原则
声明:本人设计模式模块是集合网上资料和老师课件总结的知识点,如本博客有侵权,本人即刻删。
设计模式(面向对象设计)原则,分别是:
1.开放封闭原则:对扩展开放,对修改关闭
2.单一职责原则:一个类只做一件事情
3.依赖倒转原则:采用接口编程
4.迪米特法则(最小知识原则):高内聚 、低耦合
5.接口隔离原则:细节接口
6.合成/聚合复用原则:避免使用继承
7.里氏代换原则:子类不能去修改父类的功能
1、开放封闭原则
概念:一个软件实体如类、模板、和函数应该对扩展开放、对修改关闭。模块应该在尽量不修改源代码的情况下进行扩展。
在软件周期内,因为变化、升级和维护等原因需要对软件原有代码进行修改时,可能会给代码引入错误,也可能会使我们不得不对整个功能进行重构,并且需要原有代码经过重新测试。当软件需求变化时,尽量通过扩展软件实体的行为来实现变化,而不是通过修改已有代码来实现变化。
开放封闭原则是面向对象设计的核心所在,遵循这个原则可以带来面向对象技术所声称的巨大好处,也就是可维护、可扩展、可复用、灵活性好。开发人员应该仅对程序中呈现的频繁变化的那些部分作出抽象。
2、单一职责原则
概念:就一个类而言,应该仅有一个引起它变化的原因。
当我们在做编程的时候,很自然的回个一个类加上各种各样的功能。这样意味着,无论任何需求要来,你都需要更改这个类,这样其实是很糟糕的,维护麻烦,复用不可能,也缺乏灵活性。如果一个类承担的职责过多,就等于把这些职责耦合起来,一个职责变化可能会削弱或者抑制这个类完成其他职责的能力。这种耦合会导致脆弱的设计,当变化发生时,设计会遭到很多意想不到的破坏。
3、依赖倒转原则
概念:依赖倒转原则是程序要依赖于抽象接口,不要依赖于具体实现。简单的来说就是要求对抽象进行编程,不要对实现进行编程,这样就降低了客户与实现模块的耦合。
有时候为了代码复用,一般会把常用的代码写成函数或类库。这样开发新项目的时候直接用就行了。比如做项目的时候大多要访问数据库,所以我们把访问数据库的代码写成了函数。每次做项目去调用这些函数。那么问题来了,我们要做新项目的时候,发现业务逻辑高层模块都是一样的,但客户却希望使用不同的数据库或存储方式,这时就出现了麻烦。我们希望能再次利用这些高层模块,但是高层模块都是与低层的访问数据库绑定在一起,没办法复用这些高层的模块。所以不管是高层模块和底层模块都应该依赖于抽象,具体一点就是接口或者抽象类,只要接口是稳定的,那么任何一个更改都不用担心。
4、迪米特法则(最小知识原则)
概念:一个软件实体应当尽可能的少与其他实体发生相互作用。一个软件单位对其他软件单位都只有最少的知识,而且局限于那些与本单位密切相关的软件单位。迪米特法则的初衷在于降低类之间的耦合。由于每个类尽量减少对其他类的依赖,因此,很容易使得系统的功能模块功能独立,相互之间不存在(或很少有)依赖关系。迪米特法则不希望类之间建立直接的联系。如果有真的需要建立联系的,也希望能通过他的友元类来转达。因此,应用迪米特法则有可能造成一个后果就是:系统中存在大量的中介类,这些类之所以存在完全是为了传递类之间的相互关系,这在一定程度上增加了系统的复杂度。
5、接口隔离原则
概念:客户端不应该依赖他不需要的接口,类间的依赖关系应建立在最小的接口上。
接口隔离原则的核心定义,不出现臃肿的接口,但是“小”是有限度的,首先就是不能违反单一职责原则。
6、合成/聚合复用原则
概念:合成/聚合复用原则经常又叫做合成复用原则,就是在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分,新的对象通过这些对象的委派达到复用已有功能的目的。他的设计原则是:要尽量使用合成/聚合,尽量不要使用继承。
7、里氏代换原则
概念:里氏代换原则是面向对象设计的基本原则之一。即任何基类可以出现的地方,子类一定可以出现。里氏代换原则是继承复用的基石,只有当衍生类可以替换掉基类,软件单位的功能不受影响时,基类才能被真正复用,而衍生类也能够在积累的基础上增加新的行为,里氏代换原则是对“开-闭”原则的补充。实现“开-闭”原则的关键步骤就是抽象化。在基类与子类的继承关系就是抽象化的具体实现,所以里氏代换原则是对实现抽象化的具体步骤的规范。
当满足继承的时候,父类肯定存在非私有的成员,子类肯定是得到了父类的这些非私有成员(假设,父类的成员全部是私有的,那么子类没办法从父类继承任何成员,也就不存在继承的概念了)。既然子类继承了父类的这些非私有成员,那么子类对象也就可以在父类对象中调用这些非私有成员。所以,子类对象可以替换父类对象的位置。
在里氏带环原则下,当需求有变化时,只需继承,而别的东西不会改变。由于里氏代换原则才使得开放封闭称为可能。这样使得子类在父类无需修改的情况下就可以扩展。
设计模式(面向对象)设计的七大原则相关推荐
- 深入理解面向对象设计的七大原则
一.面向对象设计的七大原则是什么? 1.开放封闭原则 2.里氏转换原则 3.依赖倒转原则 4.组合/聚合原则 5.接口隔离原则 6."迪米特"法则 7.单一职责原则 二.七大原则是 ...
- 面向对象设计的七大原则 (包括SOLID原则)
文章目录 概述 1. 单一原则 2. 里氏替换原则 3. 依赖倒转原则 4. 接口分隔原则(Interface Segregation Principle ,ISP) 5. 迪米特法则 (Law of ...
- 设计模式 - 软件设计的七大原则
文章目录 前言 1. 软件设计模式原则 2. 开闭原则 1. 概念 2. 例子 3. 里氏替换原则 1. 概念 2. 例子 4. 依赖倒置原则 1. 概念 2. 代码 5. 单一职责原则 说明 6. ...
- 面向对象设计的七大原则
面向对象设计原则简介 常用的面向对象设计原则包括7个,这些原则并不是孤立存在的,它们相互依赖,相互补充. 设计原则名称 设计原则简介 单一职责原则(Single Responsibility Prin ...
- 02 面向对象设计的七大原则
面向对象的设计原则 软件的可维护性和可复用性是用于衡量软件质量的质量属性,软件的可维护性是指软件能够被理解.改正.适用以及扩展的难易程度,软件的可复用性是指软件能够被复用的难易程度. 1> 开闭 ...
- solid 设计原则 php,面向对象设计SOLID五大原则
今天我给大家带来的是面向对象设计SOLID五大原则的经典解说. 我们知道,面向对象对于设计出高扩展性.高复用性.高可维护性的软件起到很大的作用.我们常说的SOLID五大设计原则指的就是: S = 单一 ...
- 软件架构设计_架构师内功心法,软件架构设计的七大原则精选案例
一.软件架构设计的七大原则简介 1.1 开闭原则(Open-Closed Principle,OCP) 开闭原则是一个软件实体如类.模块和函数应该对扩展开放,对修改关闭.所谓的开闭也是对扩展和修改两个 ...
- PHP面向对象设计的五大原则
面向对象设计的五大原则:单一职责原则.接口隔离原则.开放-封闭原则.替换原则.依赖倒置原则.这些原则主要是由Robert C.Martin在<敏捷软件开发--原则.方法.与实践>一书中总结 ...
- java中高级面试_中高级面试常问:Java面向对象设计的六大原则
这篇文章主要讲的是面向对象设计中,我们应该遵循的六大原则.只有掌握了这些原则,我们才能更好的理解设计模式.我们接下来要介绍以下6个内容.单一职责原则--SRP 开闭原则--OCP 里式替换原则--LS ...
最新文章
- leetCode刷题 2. 两数相加
- formal method里面的并发问题
- 【Linux】一步一步学Linux——expr命令(265)
- P3891-[GDOI2014]采集资源【背包,dp】
- java依赖_java 依赖、组合、聚合与继承
- 搞不清FastCgi与PHP-fpm之间是个什么样的关系
- 测试开发岗面试,需要准备的100道题型
- 剖析锂电池的工作原理
- 【卷积神经网络】感受野
- pgAdmin4 汉化
- Rolan 1.3.8 屏蔽强制更新
- 采用Fuel Gauge可能出现的几种电量现象及解释
- 长短视频平台内卷自制剧,网剧制作商耐看娱乐能“耐看”吗?
- OpenCV4萌新之路——详解图像读取函数 “imread”
- office2016下安装Mathtype之后显示DLL找不到的问题
- linux用户日志在哪里看,Linux用户登录记录日志和相关查看命令汇总
- 【数据结构-矩阵】矩阵的相关公式推导
- 2022-2028全球与中国360度投影系统市场现状及未来发展趋势
- 信息与计算科学有哪些SCI期刊推荐? - 易智编译EaseEditing
- 修改文件权限chown/chgrp/chmod【Linux】
热门文章
- 4.编程打印一个二维数组中所有元素的和,并打印最大值,最小值(以及它们所在的行号和列号)
- 痛与快乐有一个代码是什么_养一只真大型犬的生活是什么样的?铲屎官:痛并快乐着!...
- MFC 基础知识:对话框背景添加图片和按钮Button添加图片
- iOS之深入解析Block的使用和外部变量捕获
- 【数据结构与算法】之深入解析“复原IP地址”的求解思路与算法示例
- 【数据结构与算法】之深入解析“最小覆盖子串”的求解思路与算法示例
- iOS之深入解析预乘透明度Premultiplied Alpha
- LeetCode Algorithm 572. 另一棵树的子树
- 2015/Province_C_C++_C/9/打印大X
- 2013\National _C_C++_A\2.骰子迷题