面向对象的7个设计原则->开车理解->贴近生活
设计模式在我们的开发中是不可或缺的一部分,很多人会说,我没用那些设计模式啊,我也开发的挺好的,其实不然,我们在开发中都用到了这些设计模式,只不过我们并没有在意这些,今天我就用开车的方法来解释一下我们的7个设计原则。
简述
面向对象的设计原则有七个,包括:开闭原则、单一职责原则、里氏替换原则、迪米特原则(最少知道原则)、接口分离原则、依赖倒置原则、组合/聚合复用原则。
1>开闭原则:
在面向对象编程领域中,开闭原则规定“软件中的对象(类,模块,函数等等)应该对于扩展是开放的,但是对于修改是封闭的”,这意味着一个实体是允许在不改变它的源代码的前提下变更它的行为。该特性在产品化的环境中是特别有价值的,在这种环境中,改变源代码需要代码审查,单元测试以及诸如此类的用以确保产品使用质量的过程。遵循这种原则的代码在扩展时并不发生改变,因此无需上述的过程。摘自某度百科。
上述那段话我是没看懂什么意思(我也没仔细的去看),开闭原则一句话来解释就是对扩展开放,对修改关闭。
我们来举几个生活的栗子,小张开了一个饭店,湘菜做的很棒,顾客也越来越多了,也出现了在吃饭时间排队等候的现象,小张这时意识到我们应该扩张一下我们的饭店的规模了,于是把相邻的门店也一并租了下来,有人建议小张,你既然扩张了饭店的规模建议你去做一些别的事(严重不符合开闭原则),但是小张坚持还是做湘菜(符合开闭原则),也就是说小张你是在于原有的基础之上做了规模的扩张,而没有改变饭店原有特色菜的本质,这就是一个开闭原则的栗子。
再比如,小张去洗浴中心or足疗保健or洗头房,我们可以点一些***的服务,我们也可以提出一些别的要求,比如花式开心,不管你提什么要求,也离不开,你想做的那些事的本质,不可能有人要求洗头小妹给你修脚吧。。。这里就是我们的可以提出对于***服务的扩展花样,但是不会修改原有***服务的本质。这也就是我们的开闭原则。
从代码角度来说,就是无论我们如何去扩展类的方法和属性,也不要修改类本质的方法和属性,只扩展不修改现有,也禁止修改原有的属性。开闭原则是下面那些原则的总纲,切记很重要。
2>单一职责原则:
单一职责原则(SRP:Single responsibility principle)又称单一功能原则,面向对象五个基本原则(SOLID)之一。它规定一个类应该只有一个发生变化的原因。该原则由罗伯特·C·马丁(Robert C. Martin)于《敏捷软件开发:原则、模式和实践》一书中给出的。马丁表示此原则是基于汤姆·狄马克(Tom DeMarco)和Meilir Page-Jones的著作中的内聚性原则发展出的。摘自某度百科。
单一职责,这个应该很好理解的,只做一件事,做好一件事就够了,生活中我们也常常会说,做好一件事不难,难的是一辈子只做这一件事。职责原则一句话来解释就是请做好自己的事。
在生活中栗子有很多的,还是我们的小张开饭店的栗子,上面说了小张的饭店开的很红火,生意很好,之所以生意会好,是他一直坚持做他的特色菜,很多年了味道一直没有变过,还是那种熟悉的家乡味,有人建议他把特色菜的技术融入到烧烤,烤肉上去,小张摇摇头说,我们这是湘菜馆,不是烤肉店,我能一直做好我现在的特色菜就够了。这就是我们职责单一原则,两耳不闻别的事,单一只做一件事。
再比如,小张又来足疗保健了,不耽误时间了,直接上楼吧,“来啊,服务员,来盘鱼香肉丝”。
面向对象的7个设计原则->开车理解->贴近生活的更多相关文章
- SOLID面向对象的五个设计原则,留空待学习。
SOLID面向对象的五个设计原则对于开发人员非常重要,其身影在任何大中型软件项目中随处可见,建议必须掌握并灵活应用.此五原则分别为: 单一职责原则(Single Resposibility ...
- 设计模式<面向对象的常用七大设计原则>
面向对象设计的目标之一在于支持可维护性复用,一方面需要实现设计方案或者源码的重用,另一方面要确保系统能够易于扩展和修改,具有较好的灵活性. 常用的设计原则有七个原则: 1.单一职责原则(single ...
- Java 程序员应在2019年学习的10条面向对象(OOP)设计原则
面向对象的设计原则 是 OOP 编程的核心,但是我看到大多数 Java 程序员都在追求诸如 Singleton 模式,Decorator 模式或 Observer 模式之类的设计模式,而对学习面向 ...
- 设计模式学习--面向对象的5条设计原则之Liskov替换原则--LSP
一.LSP简介(LSP--Liskov Substitution Principle): 定义:如果对于类型S的每一个对象o1,都有一个类型T的对象o2,使对于任意用类型T定义的程序P,将o2替换为o ...
- 设计模式学习--面向对象的5条设计原则之开放封闭原则--OCP
一.OCP简介(OCP--Open-Closed Principle):Software entities(classes,modules,functions,etc.) should be open ...
- 设计模式学习--面向对象的5条设计原则之单一职责原则--SRP
一.SRP简介(SRP--Single-Responsibility Principle): 就一个类而言,应该只专注于做一件事和仅有一个引起它变化的原因. 所谓职责,我们可以理解他为功能,就是设 ...
- 设计模式学习--面向对象的5条设计原则之接口隔离原则--ISP
一.ISP简介(ISP--Interface Segregation Principle): 使用多个专门的接口比使用单一的总接口要好.一个类对另外一个类的依赖性应当是建立在最小的接口上的.一个接口代 ...
- 设计模式学习--面向对象的5条设计原则之依赖倒置原则--DIP
一.DIP简介(DIP--Dependency Inversion Principle): 1.高层模块不应该依赖于低层模块,二者都应该依赖于抽象.2.抽象不应该依赖于细节,细节应该依赖于抽象. ...
- java 28 - 1 设计模式 之 面向对象思想设计原则和模版设计模式概述
在之前的java 23 中,了解过设计模式的单例模式和工厂模式.在这里,介绍下设计模式 面向对象思想设计原则 在实际的开发中,我们要想更深入的了解面向对象思想,就必须熟悉前人总结过的面向对象的思想的设 ...
随机推荐
- 坑爹的tp-link管理密码设置
tp-link管理密码最长14位,我设置了15位的密码,突然等不上去,上网发现不少人也有类似情况,后来看到一个文章说tp-link管理密码,可以设置6-15,于是抱着试一试的态度,输入我设置密码的前 ...
- CSS 换行
默认情况下,元素的属性是 white-space:normal:自动换行:(不把单词截断,会把单词看作一个整体) -----但是但是但是但是..当元素中的内容是一对没有空格的字符/数字时,超过容器宽度 ...
- 【算法随记五】使用FFT变换自动去除图像中严重的网纹。
这个课题在很久以前就已经有所接触,不过一直没有用代码去实现过.最近买了一本<机器视觉算法与应用第二版>书,书中再次提到该方法:使用傅里叶变换进行滤波处理的真正好处是可以通过使用定制的滤波器 ...
- 模拟实现JSON.stringiry 的格式化输出
前言 这是一道笔试题,要求模拟实现JSON.stringiry 的格式化输出,按照层级缩进,输出易读格式,即完成以下方法 JSON.stringify(jsObj, null, 4); // 缩进4个 ...
- mysql 生成数据字典sql语句
SELECT TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME, COLUMN_TYPE, COLUMN_COMMENT FROM information_schema. C ...
- SpringBoot运行时动态添加数据源
此方案适用于解决springboot项目运行时动态添加数据源,非静态切换多数据源!!! 一.多数据源应用场景: 1.配置文件配置多数据源,如默认数据源:master,数据源1:salve1...,运行 ...
- 在Mac上搭建带ssl协议和域名指向的Apache服务器
顾名思义,就是要在苹果电脑上搭建 Apache 服务器,并且支持 https 协议,能用指定域名访问(有些开发调试需要注册域名,比如调试微信JS-SDK),当然最好能在手机端进行调试.首先,Mac 系 ...
- 04-07 scikit-learn库之梯度提升树
目录 scikit-learn库之梯度提升树 一.GradietBoostingClassifier 1.1 使用场景 1.2 参数 1.3 属性 1.4 方法 二.GradietBoostingCl ...
- TCP/IP协议介绍
一.什么是TCP/IP TCP/IP是一类协议系统,它是用于网络通信的一套协议集合 TCP/IP是供已连接因特网的计算机进行通信的通信协议 TCP/IP指传输控制协议/网际协议 TCP/IP定义了电子 ...
- JZOJ 3875 星球联盟
[问题描述] 在遥远的 S 星系中一共有 N 个星球,编号为 1…N.其中的一些星球决定组成联盟, 以方便相互间的交流. 但是,组成联盟的首要条件就是交通条件.初始时,在这 N 个星球间有 M 条太空 ...