SOLID原则(转载)
SOLID原则其实是由面向对象的五大设计原则组成,也是各种设计模式的基础理论。适当遵守SOLID原则,能写出高内聚,松耦合的代码,便于当需求变动能更快的拓展。废话不多说,下面立即正片。
原则名称 | 英文原义 | 中文含义 |
---|---|---|
Single Responsibility Principle | A class should have one, and only one, reason to change. | 单一责任原则 |
Open Closed Principle | You should be able to extend a classes behavior, without modifying it. | 开放封闭原则 |
Liskov Substitution Principle | Derived classes must be substitutable for their base classes. | 里氏替换原则 |
Interface Segregation Principle | Make fine grained interfaces that are client specific. | 接口分离原则 |
Dependency Inversion Principle | Depend on abstractions, not on concretions. | 依赖倒置原则 |
没错,S.O.L.I.D原则就是这五个原则的首字母简称,从气势来看就觉得很“结实”,下面就简单介绍各个原则的含义。
单一责任原则
当需要修改某个类的时候原因有且只有一个。原义就是这样,简单来说就是一个类只尽自己所责,不瞎掺和其他功能,因此只会因为 一个功能 的问题而修改一个类。这样做的好处是一个功能出问题了,调试或者更改时可以完全不会影响到另外有一个功能的执行。
开放封闭原则
当系统需要增加新功能的时候,我们应该在原基础上进行拓展,而不是从零开始把之前的代码都修改了。其实这个原则在继承中得到体现,比如由抽象的鸟类,下面的蜂鸟,金丝雀等都继承鸟类这个类,当出现新的鸟物种时,应当在由鸟类的基础上进行继承然后在子类进行拓展的,而不是因为新物种的特性而修改父类。总而言之,对拓展是开放的,对修改是封闭的 。这样做的好处是完全不用担心影响之前运行良好的代码,放心拓展!
里氏替换原则
用到父类实例的地方,把父类实例替换成子类实例应当时 无缝替换 ,照样能跑通的。之后的依赖倒置原则会告诉我们具体的东西应该依赖抽象,具体的东西(如客户端,展现层)在使用具体服务时,应当时使用父类实例,然后根据多态来真实用到子类的功能,如果不按里氏替换原则来的话,当客户端用到服务时,还要根据子类的具体情况进行调整,这样子类需要修改时,就要改两处(子类和客户端),不便修改。因此需要做到用到父类的地方,换成子类照样无缝替换,这样如果功能出问题了,我们第一反应是只要修改子类即可!
接口分离原则
接口分离原则就是当一个类实现了一个接口后,接口里面的方法都是对这个类有用的,不存在方法体为空来实现(强迫实现)。就是说,一个接口不要太过臃肿,应该粒度更细 ,因为如果接口太过臃肿,可能导致实现类实现了不属于它自己责任的方法从而违反了单一责任原则。
依赖倒置原则
具体类应该依赖抽象类,高级代码 应当也依赖抽象类 ,而不是依赖低级代码。首先先来说下,高级代码和低级代码都是具体类,其中低级代码指提供基础实现的代码,比如读写文件类,图片上传类,但是他们是具体,比如这个图片上传类是将图片上传到七牛的。其中高级代码是涉及到业务逻辑的代码,如需要用到图片上传用作头像的业务代码。这样就有个问题了,明显高级代码依赖低级代码嘛,不依赖低级代码似不似傻?但是假如有一天七牛上传图片崩了,你需要换其他图片上传服务,但是由之前高级代码依赖低级代码,所以高级类里面全tm都是低级类的片段,想想改起来就觉得可啪!!因此假如一开就依赖抽象,那样就能利用多态灵活更改了。
总结
遵守好的设计理念,不一定做出好的产品。但是用不好的设计,肯定做不出好东西!
设计模式以及理念这东西,应该是理解本质后灵活使用的,而不是死记硬背,不然死记硬背的东西,到时候实操起来也不会第一时间想到使用!!
SOLID原则(转载)相关推荐
- 独家 | Python中的SOLID原则(附链接)
作者:Mattia Cinelli翻译:朱启轩校对:欧阳锦本文约3500字,建议阅读15分钟本文通过一些Python示例代码介绍了可以提高代码可靠性的SOLID编码准则. 标签:数据结构,编程,数据科 ...
- TypeScript 中的 SOLID 原则
下面的文章解释了正确使用 TypeScrip的 SOLID原则. 原文地址:https://samueleresca.net/2016/08/solid-principles-using-typesc ...
- 我所理解的SOLID原则
S.O.L.I.D 是面向对象设计(OOD)和面向对象编程(OOP)中的几个重要编码原则(Programming Priciple)的首字母缩写. 面向对象设计的原则 SRP The Sing ...
- html5 中的solid,图解你身边的 SOLID 原则
这篇文章我们来简单介绍一下 SOLID 原则(这五个字母代表了面向对象编程的五个基本原则) 我们用身边的事物来举例,让它们更易于理解和记忆. 好啦,开始吧~ S - 单一职责原则 Single Res ...
- 设计模式 · SOLID原则
SOLID原则是指: Simple Responsibility Principle,SRP单一职责原则 Open Close Principle,OCP开闭原则 Liskov Substitutio ...
- [译]开发者须知的SOLID原则
原文:SOLID Principles every Developer Should Know – Bits and Pieces SOLID Principles every devloper sh ...
- 什么是SOLID原则(第3部分)
让我们从最后一个 SOLID 原则开始吧,即依赖倒置原则(Dependency Inversion Principle,简称 DIP)(不要和依赖注入Dependency Injection ,DI ...
- 每个Web开发者都应该知道的SOLID原则
原创: 前端之巅 前端之巅 10月20日 作者|Chidume Nnamdi 编辑|谢丽 面向对象的编程并不能防止难以理解或不可维护的程序.因此,Robert C. Martin 制定了五项指导原则, ...
- 设计模式之SOLID原则再回首
本科阶段学过设计模式,那时对设计模式的五大原则--SOLID原则的概念与理解还是比较模糊,此时过去了2年时间,在学习<高级软件工程>课程中老师又提到了设计模式,课程中还详细讨论了五 ...
- 正反案例介绍SOLID原则
一.概述 SOLID五大原则使我们能够管理解决大多数软件设计问题.由Robert C. Martin在20世纪90年代编写了这些原则.这些原则为我们提供了从紧耦合的代码和少量封装转变为适当松耦合和封装 ...
最新文章
- Python 包管理工具解惑
- 【SRIO】4、Xilinx RapidIO核详解
- jQuery :nth-child前有无空格的区别
- jdbcTemplate 后台接口中的分页
- 阿里云面试官:如果是MySQL引起的CPU消耗过大,你会如何优化?
- ×××服务器是指什么?我怎样控制自己的电脑端口的开启和关闭?
- 在eclipse中安装properties插件PropertiesEditor及设置(附图),ASCII码转换成中文
- CG-CTF-Web-这题不是WEB
- 前后端数据加密传输 RSA非对称加密
- Window上修改了mysql的配置文件my.ini后重启服务报错:本地计算机上的MySQL服务启动后停止。某些服务在未由其他服务或程序使用时将自动停止
- 福利网站!程序员面试——算法工程师面试大全第一部分
- vue-select-lang
- 烟花视频软件测试,基于视频分析的烟火自动检测预警系统
- 四:Cocos2d-x设计思想
- mysql 好用 客户端_5款好用的mysql客户端
- 前端基础 IE浏览器渲染-重置浏览器默认样式
- 明解C语言 入门 课后习题练习答案 第四章(1)
- WebKit的默认样式
- 大数据分布式数据库系统介绍
- 手机连接Eclipse连接不上
热门文章
- 从头开始复习css之选择器(中)
- 检查容器内的磁盘占用shell(check_container_disk.sh)
- 做创业公司长期价值的共建者,高榕资本完成5亿美元新基金募资
- Maven项目:Spring Boot版本的办公自动化系统
- 在css中使用hover来控制其他元素的样式,该两个元素必须是父子元素
- 打开带图片的EXCEL文档反应慢 案例解析
- Android菜鸟的成长笔记(23)——获取网络和SIM卡信息
- Windows Phone 项目实战之账户助手
- Eclipse中启动tomcat访问404解决及原因
- 14.深入分布式缓存:从原理到实践 --- 典型电商应用与缓存