S.O.L.I.D 是面向对象设计(OOD)和面向对象编程(OOP)中的几个重要编码原则(Programming Priciple)的首字母缩写。以下图说明:

下面就个人的理解来说说这五大原则的含义到底是什么?

一、单一职责:  我们通常都说“低耦合,高内聚”。在我看来,这里的"单一职责"就是我们通常所说的“高内聚”,即一个类只完成它应该完成的职责,不能推诿责任,也不可越殂代疱,不能成为无所不能的上帝类。如果你的团队中实施宽松的“代码集体所有权”,在编码的过程中出现许多人同时修改(维护)同一个类的现象,而且成员之间的沟通不够及时,主动和畅通的话,那么时间一长,就很可能出现“承担过多职责”的上帝类。这时,提炼基类/接口和提炼类重构将能帮助我们消除或减轻这种设计臭味。

二、开放封闭原则:从面向对象设计角度看,这个原则可以这么理解:"软件实体(类,模块,函数等等)应当对扩展开放,对修改闭合。" 通俗来讲,它意味着你(或者类的客户)应当能在不修改一个类的前提下扩展这个类的行为。在OOD里,对扩展开放意味着类或模块的行为能够改变,在需求变化时我们能以新的,不同的方式让模块改变,或者在新的应用中满足需求。也就是说,对扩展是开放的,而对修改是封闭的。我们通常都说:向系统中增加功能时应该只是添加新代码,而应该尽量少的修改原代码。在我看来,这就是遵循开放封闭原则所能带来的效果。

三、里氏替换原则(LSP):"子类型必须能够替换它们的基类型。"或者换个说法:"使用基类引用的地方必须能使用继承类的对象而不必知道它。" 这个原则正是保证继承能够被正确使用的前提。通常我们都说,“优先使用组合(委托)而不是继承”或者说“只有在确定是 is-a 的关系时才能使用继承”,因为继承经常导致”紧耦合“的设计。在基本的面向对象原则里,"继承"通常是"is a"的关系。如果"Developer" 是一个"SoftwareProfessional",那么"Developer"类应当继承"SoftwareProfessional"类。在类设计中"Is a"关系非常重要,但它容易冲昏头脑,导致使用错误的继承造成错误设计。例如:鸟都有一种行为fly,翠鸟和鸵鸟都继承自鸟,但是却不能够在使用鸟类的地方用鸵鸟来进行替换,因为鸵鸟不会飞,所以这就违背了里氏替换原则。

为什么LSP如此重要?

如果没有LSP,类继承就会混乱;如果子类作为一个参数传递给方法,将会出现未知行为;

如果没有LSP,适用与基类的单元测试将不能成功用于测试子类;

四、接口分离原则(ISP):这个原则的意思是"客户端不应该被迫依赖于它们不用的接口。" 也就是说,一个接口或者类应该拥有尽可能少的行为(那么,什么叫尽可能少?就是少到恰好能完成它自身的职责),这也是保证“软件系统模块的粒度尽可能少,以达到高度可重用的目的。接口包含太多的方法会降低其可用性,像这种包含了无用方法的"胖接口"会增加类之间的耦合。如果一个类想实现该接口,那么它需要实现所有的方法,尽管有些对它来说可能完全没用,所以这样做会在系统中引入不必要的复杂度,降低代码的可维护性或鲁棒性。接口分离原则确保实现的接口有它们共同的职责,它们是明确的,易理解的,可复用的。

五、依赖倒置原则(DIP):这个原则的意思是:高层模块不应该依赖底层模块,两者都应该依赖其抽象。其实又是”面向接口编程,不要面向实现编程“的内在要求。

java五大原则_Java成长第五集--面向对象设计的五大原则相关推荐

  1. Java成长第五集--面向对象设计的五大原则

    S.O.L.I.D 是面向对象设计(OOD)和面向对象编程(OOP)中的几个重要编码原则(Programming Priciple)的首字母缩写.以下图说明: 下面就个人的理解来说说这五大原则的含义到 ...

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

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

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

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

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

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

  5. 61条面向对象设计的经验原则

    61条面向对象设计的经验原则 摘抄自<OOD 启思录>--Arthur J.Riel 著 鲍志云 译 "你不必严格遵守这些原则,违背它们也不会被处以宗教刑罚.但你应当把这些原则看 ...

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

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

  7. 面向对象设计与开发原则

    介绍 这里介绍了5个面向对象设计与开发原则–SOLID原则,分别是:单一职责原则.开放封闭原则.里氏替换原则.接口隔离原则.依赖倒置原则.另外还介绍了其他3个原则:迪米特法则."Tell, ...

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

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

  9. 61条Java面向对象设计的经验原则

    1)所有数据都应该隐藏在所在的类的内部.      (2)类的使用者必须依赖类的共有接口,但类不能依赖它的使用者.      (3)尽量减少类的协议中的消息.      (4)实现所有类都理解的最基本 ...

最新文章

  1. c语言交错级数前10项和,怎么求一个交错级数的和,谢谢
  2. 24 年前的 IE 仍能在 Win10中运行,这无敌兼容性与你的代码比比?
  3. buffer 与cache 的区别
  4. 控制寄存器,CPU缓存,PWT,PCD
  5. 前端技术分享:锥形渐变conic-gradient你了解多少?
  6. 手把手教会你(单/多)文件上传(并修改文件默认的最大最小值)
  7. eclipse发布web显示异常,清除缓存也无效?
  8. 80后程序员必须知道的编程语言和它们的创造者
  9. C#调用第三方ocx控件 (winform /aspx)
  10. PCL Lesson 4:直通滤波+多视图可视化
  11. [推荐]网店代销的卖家,你的宝贝名称修改了吗?
  12. 编译cwm-recovery(含部分修改步骤)[转]
  13. Growth—电子书预览版
  14. ASCII 在线转换器
  15. 业大宗商品价格简史:经验总结与未来展望-20210107.PDF
  16. 如何准备机器学习数据集_机器学习演练第一部分:准备数据
  17. Swift不深入只浅出入门教程-孟祥月-专题视频课程
  18. Android设计模式(十六)-中介者模式
  19. 手游测试常见10个坑及填坑建议
  20. 区块链在网络安全中有何作用?

热门文章

  1. OD使用教程16 - 调试篇16
  2. HDUOJ 2089
  3. 【MM模块】Vendor Consignment 供应商寄售
  4. LSMW批处理使用方法(01)_总述及界面说明
  5. SAP WebService基础知识
  6. Excel表格复制到word中
  7. 做了这么久数据分析没收获,原来一直在做“伪数据分析”
  8. jquery 取对象数组下标_JQuery使用index方法获取Jquery对象数组下标的方法
  9. 给服务器装系统U盘要处理吗,服务器装系统从u盘装
  10. python字符串换行连接_零基础学python_03_字符串(拼接+换行+制表符)