设计模式在我们的开发中是不可或缺的一部分,很多人会说,我没用那些设计模式啊,我也开发的挺好的,其实不然,我们在开发中都用到了这些设计模式,只不过我们并没有在意这些,今天我就用开车的方法来解释一下我们的7个设计原则。

简述

  面向对象的设计原则有七个,包括:开闭原则、单一职责原则、里氏替换原则、迪米特原则(最少知道原则)、接口分离原则、依赖倒置原则、组合/聚合复用原则。

1>开闭原则:

  在面向对象编程领域中,开闭原则规定“软件中的对象(类,模块,函数等等)应该对于扩展是开放的,但是对于修改是封闭的”,这意味着一个实体是允许在不改变它的源代码的前提下变更它的行为。该特性在产品化的环境中是特别有价值的,在这种环境中,改变源代码需要代码审查,单元测试以及诸如此类的用以确保产品使用质量的过程。遵循这种原则的代码在扩展时并不发生改变,因此无需上述的过程。摘自某度百科。

  上述那段话我是没看懂什么意思(我也没仔细的去看),开闭原则一句话来解释就是对扩展开放,对修改关闭。

  我们来举几个生活的栗子,小张开了一个饭店,湘菜做的很棒,顾客也越来越多了,也出现了在吃饭时间排队等候的现象,小张这时意识到我们应该扩张一下我们的饭店的规模了,于是把相邻的门店也一并租了下来,有人建议小张,你既然扩张了饭店的规模建议你去做一些别的事(严重不符合开闭原则),但是小张坚持还是做湘菜(符合开闭原则),也就是说小张你是在于原有的基础之上做了规模的扩张,而没有改变饭店原有特色菜的本质,这就是一个开闭原则的栗子。

  再比如,小张去洗浴中心or足疗保健or洗头房,我们可以点一些***的服务,我们也可以提出一些别的要求,比如花式开心,不管你提什么要求,也离不开,你想做的那些事的本质,不可能有人要求洗头小妹给你修脚吧。。。这里就是我们的可以提出对于***服务的扩展花样,但是不会修改原有***服务的本质。这也就是我们的开闭原则。

  从代码角度来说,就是无论我们如何去扩展类的方法和属性,也不要修改类本质的方法和属性,只扩展不修改现有,也禁止修改原有的属性。开闭原则是下面那些原则的总纲,切记很重要。


2>单一职责原则:

  单一职责原则(SRP:Single responsibility principle)又称单一功能原则,面向对象五个基本原则(SOLID)之一。它规定一个类应该只有一个发生变化的原因。该原则由罗伯特·C·马丁(Robert C. Martin)于《敏捷软件开发:原则、模式和实践》一书中给出的。马丁表示此原则是基于汤姆·狄马克(Tom DeMarco)和Meilir Page-Jones的著作中的内聚性原则发展出的。摘自某度百科。

  单一职责,这个应该很好理解的,只做一件事,做好一件事就够了,生活中我们也常常会说,做好一件事不难,难的是一辈子只做这一件事。职责原则一句话来解释就是请做好自己的事。

  在生活中栗子有很多的,还是我们的小张开饭店的栗子,上面说了小张的饭店开的很红火,生意很好,之所以生意会好,是他一直坚持做他的特色菜,很多年了味道一直没有变过,还是那种熟悉的家乡味,有人建议他把特色菜的技术融入到烧烤,烤肉上去,小张摇摇头说,我们这是湘菜馆,不是烤肉店,我能一直做好我现在的特色菜就够了。这就是我们职责单一原则,两耳不闻别的事,单一只做一件事。

  再比如,小张又来足疗保健了,不耽误时间了,直接上楼吧,“来啊,服务员,来盘鱼香肉丝”。

面向对象的7个设计原则->开车理解->贴近生活的更多相关文章

  1. SOLID面向对象的五个设计原则,留空待学习。

     SOLID面向对象的五个设计原则对于开发人员非常重要,其身影在任何大中型软件项目中随处可见,建议必须掌握并灵活应用.此五原则分别为:     单一职责原则(Single Resposibility ...

  2. 设计模式<面向对象的常用七大设计原则>

    面向对象设计的目标之一在于支持可维护性复用,一方面需要实现设计方案或者源码的重用,另一方面要确保系统能够易于扩展和修改,具有较好的灵活性. 常用的设计原则有七个原则: 1.单一职责原则(single ...

  3. Java 程序员应在2019年学习的10条面向对象(OOP)设计原则

    面向对象的设计原则 是 OOP 编程的核心,但是我看到大多数 Java 程序员都在追求诸如 Singleton 模式,Decorator 模式或 O​​bserver 模式之类的设计模式,而对学习面向 ...

  4. 设计模式学习--面向对象的5条设计原则之Liskov替换原则--LSP

    一.LSP简介(LSP--Liskov Substitution Principle): 定义:如果对于类型S的每一个对象o1,都有一个类型T的对象o2,使对于任意用类型T定义的程序P,将o2替换为o ...

  5. 设计模式学习--面向对象的5条设计原则之开放封闭原则--OCP

    一.OCP简介(OCP--Open-Closed Principle):Software entities(classes,modules,functions,etc.) should be open ...

  6. 设计模式学习--面向对象的5条设计原则之单一职责原则--SRP

    一.SRP简介(SRP--Single-Responsibility Principle): 就一个类而言,应该只专注于做一件事和仅有一个引起它变化的原因.   所谓职责,我们可以理解他为功能,就是设 ...

  7. 设计模式学习--面向对象的5条设计原则之接口隔离原则--ISP

    一.ISP简介(ISP--Interface Segregation Principle): 使用多个专门的接口比使用单一的总接口要好.一个类对另外一个类的依赖性应当是建立在最小的接口上的.一个接口代 ...

  8. 设计模式学习--面向对象的5条设计原则之依赖倒置原则--DIP

    一.DIP简介(DIP--Dependency Inversion Principle): 1.高层模块不应该依赖于低层模块,二者都应该依赖于抽象.2.抽象不应该依赖于细节,细节应该依赖于抽象.   ...

  9. java 28 - 1 设计模式 之 面向对象思想设计原则和模版设计模式概述

    在之前的java 23 中,了解过设计模式的单例模式和工厂模式.在这里,介绍下设计模式 面向对象思想设计原则 在实际的开发中,我们要想更深入的了解面向对象思想,就必须熟悉前人总结过的面向对象的思想的设 ...

随机推荐

  1. profile文件的错误加载与基本命令间的映射

    一.绪论 [因为这篇心得是原创的,所以如果有哪处总结或者意见不足的地方,欢迎各位大神的批评和意见,共同学习,谢谢了!] 早些时候,需要在centos6.4系统中配置单机版和集群版单节点的hadoop ...

  2. 自定义属性--JavaScript

    1 - 获取属性值 element.属性 获取属性值 element.getAttribute('属性') 区别: element.属性 --获取内置属性(元素本身自带的属性) element.get ...

  3. ELK 学习笔记之 Logstash安装

    Logstash安装: https://www.elastic.co/downloads/logstash 下载解压: tar –zxvf logstash-5.6.1.tar.gz 在/usr/lo ...

  4. tiki-graph_formula.php代码执行漏洞复现(或许??)

    1.不知道从哪里翻出来的虚拟机镜像(不知道甚么时候出现在磁盘里面的) 打开配置一下是tikiwiki这个东西 2.遇到陌生的玩意总是忍不住好奇心的,打开nikto扫描一下,发现有些奇怪的东西 本来没抱 ...

  5. JSON说明

    1. JSON 数据的书写格式 对象:是一个无序的“‘名称/值’对”集合.一个对象以“{”(左括号)开始,“}”(右括号)结束.每个“名称”后跟一个“:”(冒号):“‘名称/值’ 对”之间使用“,”( ...

  6. 《构建之法》项目管理&典型用户和场景

    项目管理   PM的能力要求和任务: 1.观察.理解和快速学习能力 2.分析管理能力 3.一定的专业能力 4.自省的能力 在一个项目中,PM的具体任务: 1.带领团队形成团队的目标/远景,把抽象的目标 ...

  7. 斐波那契数列n项的值。(递归和非递归算法Golang实现)

    递归实现: func f(num int) int { if num == 1 || num == 2 { return 1 } return f(num-1) + f(num-2) } 非递归实现: ...

  8. centos7版本以上root密码破解

    centos7版本以上root密码破解 主讲内容: 1.centos7版本以上root密码破解   一.centos7版本以上root密码破解 重启服务器,按键盘的方向键(上 下) 按e 进入紧急救援 ...

  9. python编程基础之二十三

    集合:和数学里面完全一样的,不允许有重复元素,如果添加重复元素,就会被过滤,可以进行交并差的运算  集合是可变对象 本质:无需且无重复的数据结构 创建集合 s1 = set()  括号里面可以放可迭代 ...

  10. [ZJOI2006]物流运输trans

    Description 物流公司要把一批货物从码头A运到码头B.由于货物量比较大,需要n天才能运完.货物运输过程中一般要转停好几个码头.物流公司通常会设计一条固定的运输路线,以便对整个运输过程实施严格 ...