面向对象程序设计中,需要遵守的原则可总结为6个,这就是大名鼎鼎的六大原则。面向对象程序设计原则也是我们用于评价一个设计模式的重要指标之一。在设计模式中,很多设计模式都遵守了这些原则。

  1. 单一职责原则(Single Responsibility Principle)
  2. 里氏替换原则(Liskov Substitution Principle)
  3. 依赖倒置原则(Dependence Inversion Principle)
  4. 接口隔离原则(Interface Segregation Principle)
  5. 迪米特法则(Law Of Demeter)
  6. 开闭原则(Open Close Principle)

单一职责原则

什么是单一职责原则
单一职责原则(Single Responsibility Principle, SRP):即一个类只负责相应领域的职责,即不要存在多于一个导致类变更的原因。(There should never be more than one reason for a class to change。)

起源
罗伯特·C·马丁(Robert C. Martin)于《敏捷软件开发:原则、模式和实践》一书中给出。马丁表示此原则是基于汤姆·狄马克(Tom DeMarco)和Meilir Page-Jones的著作中的内聚性原则发展出的。

为什么要使用单一职责原则
一个类承担的职责越多,当一个职责变化时,其他职责受到影响的可能性就越大,软件出现错误的可能性就越大。

优点

  • 降低类的复杂度。一个只有一个职责的类肯定比有多个职责的类要简单。
  • 降低因职责修改带来的风险。

缺点

  • 说是缺点其实不准确。在实际操作中,想要遵循单一职责原则总是受到种种约束。要注意,原则是死的,人是活的,要根据实际情况来决定是否要遵循单一职责原则。

问题
1.有哪些设计模式遵循了单一职责原则

  • 迭代器模式。将聚合器类的遍历职责剥离出来,使聚合器类遵守“单一职责原则”。

欢迎补充。

里氏替换原则

什么是里氏替换原则(Liskov Substitution Principle,LSP)
严格定义:如果对每一个类型为 T1的对象 o1,都有类型为 T2 的对象o2,使得以 T1定义的所有程序 P 在所有的对象 o1 都代换成 o2 时,程序 P 的行为没有发生变化,那么类型 T2 是类型 T1 的子类型。

通俗定义:任何基类可以出现的地方,子类一定可以出现。

为什么要遵守里氏替换原则
LSP是继承复用的基石,只有当衍生类可以替换掉基类,软件单位的功能不受到影响时,基类才能真正被复用,而衍生类也能够在基类的基础上增加新的行为。

如何遵守里氏替换原则
在程序中尽量使用基类类型来对对象进行定义,而在运行时再确定其子类类型,用子类对象来替换父类对象。

优点
待补充

缺点
待补充

问题
1.有哪些设计模式遵循了里氏替换原则

待补充。

依赖倒置原则

什么是依赖倒置原则(Dependency Inversion Principle, DIP)
依赖倒置原则两个要点:

  • 高层次的模块不应该依赖于低层次的模块,两者应该依赖于抽象。
  • 抽象不应该依赖于具体实现,具体实现应该依赖于抽象。

为什么要遵守依赖倒置原则
依赖倒置原则(Dependence Inversion Principle)要求程序依赖于抽象接口,不要依赖于具体实现。简单的说就是要求对抽象进行编程。一般情况下抽象的变化概率很小,让用户程序依赖于抽象,实现的细节也依赖于抽象。即使实现细节不断变动,只要抽象不变,程序就不需要变化。这大大降低了调用方与实现细节的耦合度。

如何遵守依赖倒置原则

  • 变量的声明类型尽量是抽象类或接口。
  • 被引用的模块尽量都要有抽象类或接口,或者两者都有,引用它们时使用它们的抽象。

优点
待补充

缺点
待补充

问题
1.有哪些设计模式遵循了依赖倒置原则

欢迎补充。

接口隔离原则

什么是接口隔离原则(Interface Segregation Principle, ISP)

  • 客户端不应该依赖它不需要的接口。
  • 一个类对另一个类的依赖应该建立在最小的接口上。

为什么要遵守接口隔离原则
需要什么用什么,把客户端不需要用的东西放在接口里,对客户端没有好处,而且需要承担这些不需要的东西所带来的风险。

如何遵守接口隔离原则
尽量细化接口,接口中的方法尽量少。即为各个类建立专用的接口,而不要试图去建立一个很庞大的接口供所有依赖它的类去调用。

优点
待补充

缺点
待补充

问题

1.有哪些设计模式遵循了接口隔离原则
欢迎补充。

迪米特法则

什么是迪米特法则
迪米特法则(Law of Demeter,LoD),又叫作最少知道原则(Least Knowledge Principle,LKP)。就是说一个对象应当对其他对象保持最少的了解。

为什么要遵守迪米特法则
类与类之间的关系越密切,耦合度越大,当一个类发生改变时,对另一个类的影响也越大。如果一个系统符合迪米特法则,那么当其中某一个模块发生修改时,就会尽量少地影响其他模块,扩展会相对容易。

如何遵守迪米特法则
尽量降低类与类之间的耦合。

优点
待补充

缺点
待补充

问题

1.有哪些设计模式遵循了迪米特法则

  • 外观模式。外观模式对客户端屏蔽子系统,客户端不需要了解子系统,直接访问外观类即可。
  • 责任链模式。请求发送者只负责创建责任链,不需要知道请求被哪个处理者处理,怎样处理。
  • 命令模式。请求者和接受者之间不存在直接引用,实现了解耦。
  • 中介者模式。中介者模式将各同事解耦,实现了“一个对象应当对其他对象保持最少的了解”。
  • 观察者模式。观察者和目标是抽象耦合的。目标只是维持了一个观察者的集合,而不知道任何一个观察者是属于哪个具体的类的。这样目标和观察者之间的耦合是最小的。

认知有限,欢迎补充。

开闭原则

什么是开闭原则
开闭原则(Open Closed Principle):一个软件实体应该对扩展开放,对修改关闭。

软件实体
软件实体指的是如类、模块和函数。

为什么要遵守开闭原则
需求的变动是任何一软件系统都难以避免的问题,在需求变动时,如果软件系统遵守开闭原则,那么就能不修改原有代码,而是在现有的代码的基础上进行扩展。在软件规模越来越大,寿命越来越长的今天,遵守开闭原则变得尤其重要。

如何遵守软件符合开闭原则
抽象化。

优点
待补充

缺点
待补充

问题

1.有哪些设计模式遵循了开闭原则

  • 工厂方法模式。在工厂方法模式中,当需要新增一种产品时,只需要新增一个产品类和工厂类即可,不需要修改原有代码。
  • 抽象工厂模式。增加新的具体工厂和产品族很方便,无须修改已有系统。
  • 建造者模式。指挥者类针对抽象建造者类编程,增加新的具体建造者无须修改原有类库的代码,系统扩展方便。
  • 适配器模式。可以在不修改原有代码的基础上增加新的适配器类。
  • 桥接模式。在抽象部分和实现部分两个变化维度中任意扩展一个维度,都不需要修改原有代码。
  • 组合模式。在组合模式中新增叶子构件和容器构件都很方便。
  • 装饰模式。客户端可以根据具体需要添加具体构建类和具体装饰类,并进行组合。
  • 责任链模式。想要新增一个处理者,只需要在客户端中重新建立链即可,原有系统不需要修改。
  • 命令模式。加入新的具体命令类不会影响原有系统。
  • 解释器模式。在解释器模式中,增加新的解释表达式较为方便。如果需要增加新的解释表达式,只需要对应增加一个新的终结符表达式或非终结符表达式类,原有表达式类代码无须修改。
  • 迭代器模式。由于有抽象聚合类和抽象迭代器类,添加新的聚合类和迭代器都不需要修改原有代码。
  • 中介者模式。如果需要引入新的具体同事类,只需要继承抽象同事类并实现其中的方法即可,由于具体同事类之间并无直接的引用关系,因此原有所有同事类无须进行任何修改,它们与新增同事对象之间的交互可以通过修改或者增加具体中介者类来实现。如果需要增加新的具体中介者类,只需要继承抽象中介者类(或已有的具体中介者类)并覆盖其中定义的方法即可,在新的具体中介者中可以通过不同的方式来处理对象之间的交互,也可以增加对新增同事的引用和调用。
  • 观察者模式。可以在不修改原有系统的条件下灵活的新建新的策略。
  • 模板方法模式。可以在不修改原有代码的前提下灵活的新增具体子类。
  • 部分遵守开闭原则。为什么说部分遵守呢?因为新增新的访问操作很方便,仅需要增加一个新的访问者即可在一个对象结构上定义一个新的操作。但如果需要新增元素类,要在抽象访问者角色中增加一个新的抽象操作,并在每一个具体访问者类中增加相应的具体操作。

欢迎补充。

面向对象程序设计六大原则相关推荐

  1. [转]面向对象的六大原则

    现在编程的主流语言基本上都是面向对象的.如C#,C++,JAVA.我们在使用时,已经构造了一个个的类.但是往往由于我们在类内部或外部的设计上存在种种问题,导致尽管是面向对象的语言,却是面向过程的逻辑, ...

  2. 面向对象的六大原则之 —— 迪米特原则

    学习了何红辉.关爱民写的<Android设计模式>,对于面向对象的六大原则有进一步的理解,特此根据自己的理解记录总结一下 什么是迪米特原则 也称为最少知识原则,意思就是一个对象应该对其他对 ...

  3. 程序设计六大原则-概况与举例

    总结设计原则其实很早以前就在想了,但是起初我认为固定的原则会局限人的创新思维,陈旧的定律不一定是最好的.实际上随着代码量的沉积,你会发现无形之中你的程序设计会和这六大原则不谋而合.大道至简,前人走过的 ...

  4. 面向对象编程 - 六大原则

    在做面向对象程序设计时,我们通常会在为如何设计一个类而烦恼.这里简单介绍面向对象编程的几个原则,根据这些原则去设计类以及类与类之间的关系,从而使得程序满足高可维护.可复用等条件. 面向对象编程与面向过 ...

  5. 面向对象的六大原则(原则都是唬人 关键在于理解面向对象)

    一 六大原则叫什么我已经忘了 二 六大原则到底是什么以及有什么作用,一句话:教你在用面相对象编程语言编程的时候如何更好地利用面向对象编程语言的特性. 例如:如果你使用的是java语言的话. 1 最基本 ...

  6. 走向灵活软件之路-面向对象的六大原则

    前言 关于设计模式六大设计原则的资料网上很多,但感觉很多地方解释地都太过于笼统化,特此再总结一波. 优化第一步-单一职责原则SRP 单一职责原则(Single Responsibility Princ ...

  7. 设计模式之——面向对象的六大原则

    一.单一职责原则     定义:Single Responsibility Principle,即SRP:一个类应该是相关性很高的方法与数据的封装,不同的职责应该分别封装到不同的类或模块当中.     ...

  8. 面向对象的六大原则之 接口隔离原则——ISP

    ISP = Interface Segregation Principle ISP的定义如下: 1.客户端不应该依赖他不需要的接口 2.一个类对另外一个类的依赖性应该是建立在最小的接口上 3.不应当将 ...

  9. 面向对象设计六大原则

    6大原则如下: 1)单一职责原则,一个合理的类,应该仅有一个引起它变化的原因,即单一职责,就是设计的这个类功能应该只有一个; 优点:消除耦合,减小因需求变化引起代码僵化. 2) 开-闭原则,讲的是设计 ...

最新文章

  1. 用Python防止头上一片青青草原
  2. 什么是数据中台?全面解读数据中台
  3. 重磅!双腿机器人Digit v2视频流出,自主搬卸货物噪音极小
  4. C语言字符串函数大全
  5. mixin network_【译文】Mixin——以最高的安全性满足所有区块链资产的交易需求
  6. leetcode336. 回文对(字典树)
  7. 《常用控制电路》学习笔记——数控锁相环调速电路
  8. Java学习之文件操作
  9. element ui 图片控件 排序_vuedraggable+element ui实现页面控件拖拽排序效果
  10. HDU1012 Calculate e
  11. 备份long字段数据
  12. 北京/杭州内推 | 阿里达摩院城市大脑实验室视觉团队招收CV实习生
  13. Docker真实应用场景案例解析——ASSA ABLOY
  14. JavaScript 格式化显示JSON
  15. 三菱触摸屏怎么改时间_三菱触摸屏时钟设置步骤
  16. 富士施乐FujiXeroxDocuCentre-V2060扫描到PC
  17. codec engine 编译
  18. Linux之修改语言(语系)
  19. 自学系列 | 就谈兴趣!
  20. 说一说JS数据类型有哪些

热门文章

  1. ddos攻击是利用什么进行攻击
  2. 服务器文件夹temp,服务器性能变慢 c盘temp文件夹存在大量sess开头文件的问题原因及解决...
  3. 广电在5G时代的发展和应对策略
  4. 【期末复习】带着问题看网络信息安全
  5. Java工程师必备软件大合集,手把手教你如何下载和安装
  6. 抖音seo源码,抖音seo矩阵系统源码技术搭建
  7. Appium使用swipe定位滚动列表和滚动屏幕元素
  8. 夜神安卓7导入charles证书
  9. 密码学系列 - 椭圆曲线 ECC - ED25519
  10. 别被漫画骗了..棋魂真正的结局是....