单一职责原则(SRP):Single Responsibility Principle

A class should have one and only one reason to change, meaning that a class should have only one job.

一个类应该有一个且只有一个改变的原因,这意味着一个类应该只有一个职责。

职责有粒度之分,有层级之别,当系统越复杂,一个类的职责应该越单一,以提高类的透明度,便于维护。

好比在小公司,一个人可能身兼数职,因为事情少,负责多件事也能应付,主要是可以减少人力成本。如果在大公司,职级体系全面,每个人都有固有职责,这样更便于管理。

所以这里面有个权衡问题,如果业务简单,划分出太多的类完全没必要,如果要构建复杂体系,单一职责就很有必要。

开闭原则(OCP):Open-Closed Principle

Software entities (classes, modules, functions, etc.) should be open for extension, but closed for modification.

软件实体(类、模块、函数等)都应当对扩展具有开放性,但是对于修改具有封闭性。

Spring框架就是开闭原则最具体的体现,它里面有很多的扩展点,基本上不需要对源码进行修改。想对扩展开放,抽象必不可少,spring里接口无处不在。在具体项目时,还是需要权衡,过多的抽象虽然能提高扩展性,但同时也增加复杂性。很多时候,我们并不能很好的对功能做出合理的抽象,就像在写service层的代码时,经常会有变动,接口类反而会增加额外的维护负担。

总而言之,对功能进行合理适度的抽象(或封装)是很有必要的,只有这样,我们才能很淡定的拥抱需求的变化。

里氏替换原则(LSP):Liskov Substitution Principle

Functions that use pointers or references to base classes must be able to use objects of derived classes without knowing it.所有引用基类的地方必须能透明地使用其子类对象。

子类应该是具有父类的一切特征,在引用父类的地方应该可以无缝替换成子类。

言下之意是子类应尽可能在去继承,而不是去覆盖父类的方法。换个角度来看,也就是说父类中的方法应该具有普适性,不应该存在以偏概全的情况。

迪米特法则(LOD):Law of Demeter

Talk only to your immediate friends and not to strangers

只和你的直系朋友说话,不要和陌生人说话

迪米特法则(Law of Demeter)又叫作最少知识原则(The Least Knowledge Principle),一个类对于其他类知道的越少越好,就是说一个对象应当对其他对象有尽可能少的了解,只和朋友通信,不和陌生人说话。

这个原则初衷应该是尽可能减少对其他类的依赖,即使有依赖,我们也要通过靠谱的对象进行转达。个人觉得网关比较适合这个原则,前端对后台服务的访问都走网关,它不需要知道提供服务的应用具体是哪个。

接口隔离原则(ISP):Interface Segregation Principle

A client should never be forced to implement an interface that it doesn’t use, or clients shouldn’t be forced to depend on methods they do not use.

永远不要强迫客户端实现它不使用的接口,也不要强迫客户端依赖它们不使用的方法。

接口本身应该符合单一职责原则(SRP),不应过于臃肿,要有一定的边界。在JAVA中对接口是可以多继承的,比如spring中对象的生命周期接口,就可以通过多继承的方式来实现。换句话说,就是可以根据需求来实现不同的接口,不需要冗余不需要的空接口。

依赖倒置原则(DIP):Dependency Inversion Principle

Entities must depend on abstractions, not on concretions. It states that the high-level module must not depend on the low-level module, but they should depend on abstractions.

实体必须依赖于抽象,而不是具体实现。它指出高级模块不能依赖于低级模块,而应该依赖于抽象。

这个原则应该就是对面向接口编程的归纳,为什么要面向接口编程? 如果想构建复杂的系统,定然要采用分治思维,将系统划分为不同的模块,那模块之间要靠什么进行互通?就是靠接口。接口可以屏蔽模块的底层细节,其他模块无须关注实现细节,只需按照接口规约进行调用就可以得到需要的答案。从另一个角度来看,接口的质量很重要,需要保持相对稳定。

六大设计原则(SOLID)备忘相关推荐

  1. 六大设计原则SOLID

    六大设计原则SOLID 一.SOLID 设计模式的六大原则 二.单一职责原则 (Single Responsibility Principle) 1. 单一职责原则定义 2. 问题由来 3. 解决方案 ...

  2. 六大设计原则 (SOLID)

    设计原则概述 设计模式中主要有六大设计原则,简称为SOLID ,是由于各个原则的首字母简称合并的来(两个L算一个,solid 稳定的),六大设计原则分别如下: 1.单一职责原则(Single Resp ...

  3. 六大设计原则(SOLID)

    一.SOLID 设计模式的六大原则有: Single Responsibility Principle:单一职责原则 Open Closed Principle:开闭原则 Liskov Substit ...

  4. 【六大设计原则-SOLID】

    SOLID简介: 历史:由Robert C·Martin汇总并推广 目标: 使软件更容易被改动 是软件更容易被理解 构建可以在多个软件系统中复用的组件 组成: 名称 简写 含义 单一职责原则 SRP ...

  5. 设计模式必备知识点----六大设计原则

    六大设计原则 一,开闭原则 开闭原则的定义 什么是开闭原则 开闭原则的作用 开闭原则的优点 二,单一职责原则 单一职责定义 单一职责的作用 单一职责的优点 单一职责的违背原则 三,依赖倒置原则 依赖倒 ...

  6. 设计模式—六大设计原则

    本文开始对<设计模式之禅>进行学习总结,首先是六大设计原则. 单一职责原则 单一职责原则(Single Responsibility Principle)简称SRP,这个原则存在的争议之处 ...

  7. IOS设计模式的六大设计原则之开放-关闭原则(OCP,Open-Close Principle)

    定义 一个软件实体(如类.模块.函数)应当对扩展开放,对修改关闭. 定义解读 在项目开发的时候,都不能指望需求是确定不变化的,大部分情况下,需求是变化的.那么如何应对需求变化的情况?这就是开放-关闭原 ...

  8. [转] 设计模式的六大设计原则

    转载说明: 感谢原作者吕震宇老师的分享. 原文参考链接:https://www.cnblogs.com/zhenyulu/category/6930.html? 本次转载只用于个人学习使用,并不涉及商 ...

  9. 【0718作业】收集和整理面向对象的六大设计原则

    面向对象的六大设计原则 (1)单一职责原则--SRP (2)开闭原则--OCP (3)里式替换原则--LSP (4)依赖倒置原则--DIP (5)接口隔离原则--ISP (6)迪米特原则--LOD - ...

  10. 设计模式三大类及六大设计原则

    设计模式分为三大类: 创建型模式,共五种: 单例模式 工厂方法模式 抽象工厂模式 建造者模式 原型模式 结构型模式,共七种: 适配器模式 装饰模式 代理模式 外观模式 桥接模式 组合模式 享元模式 行 ...

最新文章

  1. 聊聊ajax,聊聊Ajax()中data()基本知识以及实例分析
  2. python初学者用什么编辑器好_新人学 python 选什么编辑器比较好呢??
  3. html动态网页效果代码_教你制作网页的第一步
  4. 解密 云HBase时序引擎OpenTSDB 优化技术
  5. LeetCode 507. Perfect Number
  6. 二叉链表之寻找两节点的最近公共祖先☆
  7. 04 | 事件调度层:为什么 EventLoop 是 Netty 的精髓?
  8. wordpress修改mysql端口_Wordpress更改端口后访问自动跳转老端口
  9. 流放之路材质过滤怎么设置_用一张漫反射贴图可以做写实材质吗?
  10. HDU 1212 大整数的取模运算
  11. 1024 科学计数法(C语言详解)
  12. 我的世界服务器发消息有符号,我的世界彩色字体符号
  13. stream测试内存带宽
  14. docker搭建rap2
  15. 《Linux操作系统-基础笔记》第6章 编译调试工具(GCC、GDB)
  16. 互联网金融概念股龙头有哪些
  17. 软件测试需要学什么?测试小白入门必看!
  18. Python 检测PE所启用保护方式
  19. c/c++ read 函数和 write 函数
  20. Android 微信分享与QQ分享功能(原生实现)

热门文章

  1. 设置美团用户cookie实现用户登录
  2. const的小把戏。
  3. pygame之Surface模块
  4. matlab 三角函数 积化和差,瞬间记住三角函数和差化积积化和差公式
  5. 案例:vivo基于Java技术栈的实时监控系统
  6. 程序设计基础之C语言计算职工工资
  7. 华为企业云如何让 DevOps 真正落地?
  8. directive之require
  9. Recent concerns
  10. 山西藏家捐献44幅明清寺观壁画在山西博物院展出(图)