当前位置: 七九推 > IT编程>软件设计>设计模式 > 大话设计模式笔记(三)の六大原则

大话设计模式笔记(三)の六大原则

2022年06月23日 设计模式 我要评论
单一职责原则英文:single responsibility principle,简称srp。定义就一个类而言,应该仅有一个引起它变化的原因。描述如果一个类承担的职责过多,就等于把这些职责耦合在一起,

单一职责原则

英文:single responsibility principle,简称srp

定义

就一个类而言,应该仅有一个引起它变化的原因。

描述

  • 如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会削弱或者抑制这个类完成其他职责的能力。这种耦合会导致脆弱的设计,当变化发生时,设计会遭受到意想不到的破坏。
  • 软件设计真正要做的许多内容,就是发现职责并把那些职责相互分离。
  • 如果能想到多于一个动机去改变一个类,那么这个类就具有多于一个的职责。

开放-封闭原则

英文:open closed principle,简称ocp

定义

是说软件实体(类、模块、函数等)应该可以扩展,但是不可修改。

描述

  • 也就是对扩展是开放的,对更改是封闭的
  • 无论模块是多么的“封闭”,都会存在一些无法对之封闭的变化。既然不可能完全封闭,设计人员必须对于他设计的模块应该对哪些变化封闭做出选择。他必须把先猜测出最有可能发生的变化种类,然后构造抽象来隔离那些变化
  • 在我们最初编写代码时,假设变化不会发生。当变化发生时,我们就创建抽象来隔离以后发生的同类变化。
  • 面对需求,对程序的改动时通过增加新代码进行的,而不是更改现有的代码。
  • 我们希望的是开发工作展开不久就知道可能发生的变化。查明可能发生的变化所等待的时间越长,要创建正确的抽象就越困难。
  • 开放-封闭原则是面向对象设计的核心所在。遵循这个原则可以带来面向对象技术,所声称的巨大好处,也就是可维护、可扩展、可复用、灵活性好。开发人员应该仅对程序中呈现出频繁变化的那些部分作出抽象,然而,对应用程序中每个部分都刻意的进行抽象不是一个好主意。拒绝不成熟的抽象和抽象本身一样重要

依赖倒转原则

英文:dependence inversion principle,简称dip

定义

高层模块不应该依赖低层模块,两个都应该依赖抽象;抽象不应该依赖细节,细节应该依赖抽象。

描述

  • 说白了就是,针对接口编程,不要对实现编程
  • 依赖倒转其实可以说是面向对象设计的标志,用哪种语言来编写程序不重要,如果编写时考虑的是如果针对抽象编程而不是针对细节编程,即程序中所有的依赖关系都是终止于抽象类或者接口,那就是对象的设计,反之那就是过程化的设计了。

里氏代换原则

英文:liskov substitution principle,简称lsp

定义

子类型必须能够替换掉它们的父类型。

描述

  • 一个软件实体如果使用的是一个父类的话,那么一定适用于其子类,而且它察觉不出父类对象和子类对象的区别。也就是说,在软件里面,把父类都替换成它的子类,程序行为没有变化
  • 只有当子类可以替换掉父类,软件单位的功能不受影响时,父类才能真正被复用,而子类也能够在父类的基础上增加新的行为。
  • 由于子类型的可替换性才使得使用父类类型的模块在无需修改的情况下就可以扩展。

迪米特法则

英文:law of demeter,简称lod

定义

也叫最少知识原则。如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用。如果其中一个类需要调用另一个类的某一个方法的话,可以通过第三者转发这个调用。

描述

  • 迪米特法则的根本思想是强调了类之间的松耦合
  • 类之间的耦合越弱,越有利于复用,一个处在弱耦合的类被修改,不会对有关系的类造成波及。

接口隔离原则

虽然该原则在《大话设计模式》没有明确指出,但实际上隐含在了其他模式或原则中。

英文:interface segregation principle,简称isp

定义

一个类对另外一个类的依赖性应当建立在最小的接口上。客户端程序不应该依赖它不需要的接口方法。

描述

  • 接口隔离原则单一职责原则在概念上有一定的交叉。两者都是为了提高类的内聚性,降低它们之间的耦合性,体现了封装的思想。但两者是不同的。
  • 接口隔离原则强调的是接口对客户端的承诺越少越好,并且做到专一。当某个客户端程序的要求发生变化时迫使接口发生变化,影响到客户端程序的可能性越小越好。
  • 接口隔离原则注重的是对接口依赖的隔离,用于约束接口,主要针对抽象和整体框架的构建
  • 单一职责原则注重的是职责,用于约束类,主要针对程序中实现和细节

总结

实际上很多设计模式在概念上也有一定的交叉,如果只是根据一段代码来判断属于哪种设计模式,也是很难区分的,甚至还包含多种的混合。因此不要一直纠结于其中的思想到底属于哪一种,理解其中的含义并能应用至实际开发当中才是最重要的

(0)
打赏 微信扫一扫 微信扫一扫

相关文章:

  • Dockerfile 详解

    Dockerfile 详解

    文章目录 一、Dockerfile(制作镜像脚本化)1.1 什么是Dockerfile1.2 为什么要使用Dockerfile 二... [阅读全文]
  • Reactor模式理解

    Reactor模式理解

    Reactor模式也可以叫反应器模式或者应答者模式reactor模式简介让我们先了解一下阻塞I/O与非阻塞I/OI/O 是非常缓慢的I/O绝对是计算机操作中最慢... [阅读全文]
  • 设计模式---代理模式

    设计模式---代理模式

    什么是代理模式? 代理模式的定义:代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。通俗的来讲代理模式就是我们生活中常见的中介。举个例子... [阅读全文]
  • 简说设计模式——外观模式

    一、什么是外观模式  有些人可能炒过股票,但其实大部分人都不太懂,这种没有足够了解证券知识的情况下做股票是很容易亏钱的,刚开始炒股肯定都会想,如果有个懂行的帮帮手就好,其实基金就是…

    2022年06月23日 软件设计
  • 【设计模式】简单工厂模式

    【设计模式】简单工厂模式

    目的是为了可维护、可复用、可扩展、灵活性好以四则运算为例:先有个父类运算类:  public class Operation { protected do... [阅读全文]
  • 设计模式系列 - 观察者模式

    设计模式系列 - 观察者模式

    当对象之间存在一对多的关系时,若需要进行对象之间的通知,则可使用观察者模式介绍观察者模式属于行为型模式,当一个对象的状态发生改变时,若我们想通知其他对象,此时可... [阅读全文]

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2022  七九推 保留所有权利. 粤ICP备17035492号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com