经过前面深入的阐述,SOLID的原则我们已经基本上讲清楚了,但如果想熟练的应用SOLID原则,仅仅知道SOLID是什么(what)还不够,我们还需要知道SOLID原则在什么时候和什么场景应用(when或where)。

幸运的是,SOLID原则的5个独立原则在实际应用中基本上都是独挡一面,并不会在某个地方需要同时从可选的几个原则中挑选一个最优的原则来应用,这样大大降低了我们应用SOLID原则的难度。

SOLID原则具体的应用场景如下:

  • SRP原则:用于类的设计

当我们想出一个类,或者设计出一个类的原型后,使用SRP原则核对一下类的设计是否符合SRP要求。

  • OCP原则:总的指导思想

OCP原则是一个总的指导思想,在面向对象的设计中,如果能够符合LSP/ISP/DIP原则,一般情况下就能够符合OCP原则了。

除了在面向对象的软件设计中外,OCP也可以用于指导系统架构设计,例如常见的CORBA、COM协议,其实都可以认为是OCP原则的具体应用和实现。

  • LSP原则:用于指导类继承的设计

当我们设计类之间的继承关系时,使用LSP原则来判断这种继承关系是否符合LSP要求。

  • ISP原则:用于指导接口的设计

ISP原则可以认为是SRP原则的一个变种,本质上和SRP的思想是一样。SRP用于指导类的设计,而ISP用于指导接口的设计。

  • DIP原则:用于指导类依赖的设计

当我们设计类之间的依赖关系时,可以使用DIP原则来判断这种依赖是否符合DIP原则。

DIP原则和LSP原则相辅相成:DIP原则用于指导抽象出接口或者抽象类,而LSP原则指导从接口或者抽象类派生出新的子类。

面向对象葵花宝典:思想、技巧与实践(36) - 设计原则如何用?相关推荐

  1. 软件开发设计思想与6大软件设计原则、23种设计模式目录-设计模式

    目录 1.软件开发设计指导思想: (1)可维护性Maintainability (2)可复用性Reusability (3)可扩展性Extensibility/Scalability (4)灵活性fl ...

  2. 举例说明层次分析的三大原则_LabVIEW面向对象编程_初窥门槛(2)_设计原则(SOLID)...

    该系列一共是9篇文章,本文是该系列的第二篇,是讲述通用的面向对象编程设计原则(SOLID),LabVIEW作为一门具备面向对象编程范式的图形化编程语言当然也要遵循上述的通用设计原则,当然除了接口隔离原 ...

  3. 面向对象(OOP)的七大设计原则

    如何学习设计模式                                                                                             ...

  4. 设计原则:里式替换原则(LSP)

    系列文章 设计原则:单一职责(SRP) 设计原则:开闭原则(OCP) 设计原则:里式替换原则(LSP) 设计原则:接口隔离原则(ISP) 设计原则:依赖倒置原则(DIP) 何谓高质量代码? 理解RES ...

  5. 连载:面向对象葵花宝典:思想、技巧与实践(34) - DIP原则

    DIP,dependency inversion principle,中文翻译为"依赖倒置原则". DIP是大名鼎鼎的Martin大师提出来的.他在1996 5月的C++ Repo ...

  6. 设计原则与思想【面向对象、设计原则、编程规范、重构技巧】

    一.高质量代码的评判标准: 可维护性:在不破化原有代码设计.不引入新的bug的情况下,能够快速的修改或者添加代码 可读性:我们需要看代码是否符合编码规范.命名是否达意.注释是否详尽.函数是否长短合适. ...

  7. App 后台架构设计方案 设计思想与最佳实践

    CSDN 2016博客之星评选结果公布      [系列直播]零基础学习微信小程序!        "我的2016"主题征文活动     博客的神秘功能 App 后台架构设计方案 ...

  8. 编写程序描述影视歌三栖艺人。需求说明:请使用面向对象的思想,设计自定义类,描述影视歌三梄艺人。...

    编写程序描述影视歌三栖艺人.需求说明:请使用面向对象的思想,设计自定义类,描述影视歌三梄艺人. 实现思路: 1) 分析影视歌三栖艺人的特性:可以演电影,可以演电视剧,可以唱歌 2) 定义多个接口描述特 ...

  9. java面向对象的设计思想,java设计形式之面向对象的思想(think in OO(Object Oriented))...

    java设计模式之面向对象的思想(think in OO(Object Oriented)) 面向对象的概念: 就是用对象的思维方式,抽象生活中的事物,设计程序,其基本思想是使用对象,类,继承,封装, ...

最新文章

  1. python列表的排序方法_pythonlist排序的两种方法及实例
  2. DNSBIND——DNS的子域授权和定义转发服务器
  3. OSChina 周五乱弹 —— 要作死就勇敢地作!
  4. 用HTML和CSS和JS构建跨平台桌面应用程序的开源库Electron的介绍以及搭建HelloWorld
  5. UVa 1625 Color Length
  6. ZooKeeper入门(二)Java操作zookeeper
  7. python函数实例解析_python支持返回函数的实例解析
  8. 上证指数30年k线图_技术预判2020:上证指数要突破3500点才会“井喷”
  9. 阿里中台建设全解密:包含哪些内容?如何发挥作用?
  10. python中素数怎么求_用python怎么求素数
  11. Adblock Plus无法屏蔽CSDN右下角广告解决
  12. python模块 - re模块使用示例
  13. C++关键字 explicit
  14. Mac新手入门教学:活用Mac通知中心,生活讯息一眼看尽
  15. Vue:vue项目npm安装animate.css后动画效果不起作用
  16. nginx模块开发 c语言,Nginx模块开发 – C++模块
  17. [ISUX译]iOS 9人机界面指南(一):UI设计基础
  18. Ajax配合jQuery和数据库
  19. 一种基于最大吸收功率的卫星太阳能电池板安装方案
  20. 如何为自己制作出一份优秀的简历

热门文章

  1. 【Android 异步操作】线程池 ( 线程池使用示例 | 自定义线程池使用流程 | 自定义任务拒绝处理策略 | 完整代码示例 )
  2. 【Android RTMP】RTMPDumb 源码导入 Android Studio ( 交叉编译 | 配置 CMakeList.txt 构建脚本 )
  3. 【C++ 语言】引用 ( 引用简介 | 指针常量 | 常量指针 | 常引用 | 引用参数 | 引用 指针 对比 )
  4. 【UML 建模】UML建模语言入门 -- 静态图详解 类图 对象图 包图 静态图建模实战
  5. 关于Linux 是怎么来的,该如何去学
  6. [Angular2 Form] Style Validation in Angular 2 Forms
  7. 启动Tomcat一闪而过解决
  8. xslt中的Javascript取得xml中的参数
  9. 运动学与雅可比矩阵举例
  10. 上海交大:基于近似随机Dropout的LSTM训练加速