文档章节

六大设计原则快速记忆SOLID

诺维老司机
 诺维老司机
发布于 2014/02/12 12:45
字数 870
阅读 293
收藏 1

「深度学习福利」大神带你进阶工程师,立即查看>>>

常见的面向对象设计的原则,可以简化为SOLID原则,坚固slidi的软件需要遵循的原则。

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

定义:不要存在多于一个导致类变更的原因。通俗的说,即一个类只负责一项职责。

2、开放-关闭原则OCP(Open-Close Principle)

定义:一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。

3、里氏替换原则LSP(Liskov Substitution Priciple)

通俗的定义:所有引用基类的地方必须能透明地使用其子类的对象。

更通俗的定义:子类可以扩展父类的功能,但不能改变父类原有的功能。 

  • 子类可以实现父类的抽象方法,但是不能覆盖父类的非抽象方法。

  • 子类中可以增加自己特有的方法。

  • 当子类覆盖或实现父类的方法时,方法的前置条件(即方法的形参)要比父类方法的输入参数更宽松。

  • 当子类的方法实现父类的抽象方法时,方法的后置条件(即方法的返回值)要比父类更严格。

4、依赖倒置原则DIP(Dependence Inversion Principle)

所谓依赖倒置原则(Dependence Inversion Principle)就是要依赖于抽象,不要依赖于具体。简单的说就是要求对抽象进行编程,不要对实现进行编程,这样就降低了客户与实现模块间的耦合。

模块间的依赖是通过抽象发生,实现类之间不发生直接的依赖关系,其依赖关系是通过接口或抽象类产生的;

接口或抽象类不依赖于实现类; 实现类依赖接口或抽象类。

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

接口隔离原则(ISP)拆分非常庞大臃肿的接口成为更小的和更具体的接口,这样客户将会只需要知道他们感兴趣的方法。这种缩小的接口也被称为角色接口(role interfaces)。[2]接口隔离原则(ISP)的目的是系统解开耦合,从而容易重构,更改和重新部署。接口隔离原则是在SOLID (面向对象设计)中五个面向对象设计(OOD)的原则之一,类似于在GRASP (面向对象设计)中的高内聚性。      

使用多个专门的接口比使用单一的总接口要好。

一个类对另外一个类的依赖性应当是建立在最小的接口上的。
一个接口代表一个角色,不应当将不同的角色都交给一个接口。没有关系的接口合并在一起,形成一个臃肿的大接口,这是对角色和接口的污染。

6、最少知识原则LKP(Least Knowledge Principle)

迪米特法则(Law of Demeter)又叫作最少知道原则(Least Knowledge Principle 简写LKP),就是说一个对象应当对其他对象有尽可能少的了解,不和陌生人说话。英文简写为: LoD.

门面模式和调停者模式实际上就是迪米特法则的应用。

广义的迪米特法则在类的设计上的体现:

优先考虑将一个类设置成不变类。

尽量降低一个类的访问权限。

谨慎使用Serializable。

尽量降低成员的访问权限。



诺维老司机
粉丝 344
博文 709
码字总数 111419
作品 0
青岛
后端工程师
私信 提问
加载中
请先登录后再评论。
5分钟 maven3 快速入门指南

前提条件 你首先需要了解如何在电脑上安装软件。如果你不知道如何做到这一点,请询问你办公室,学校里的人,或花钱找人来解释这个给你。 不建议给Maven的服务邮箱来发邮件寻求支持。 安装Mav...

fanl1982
2014/01/23
1.2W
7
WebUI自动化测试框架--Dagger

Dagger是网易杭州研究院QA团队开发的一个轻量级、运行稳定的WebUI自动化测试框架,主要基于Selenium及TestNg可以认为是对Selenium进行二次封装的一个框架(俗称 造轮子 )。之所以把这个轮子...

ChenKan
2013/03/05
2.8W
6
PHP框架--XiunoPHP

XiunoPHP 是一款面向高负载应用的 PHP 开发框架,PHPer 通过它可以快速的简单的开发出高负载项目。 XiunoPHP 前身名为 Xiuno Framework,更名后版本号从 v1.0 开始计算。已经经过了多年的实际...

匿名
2013/03/20
2.5K
0
Chrome页面自动刷新插件--smartF5

smartF5是一款chrome插件,用以实现监控页面资源,并自动刷新。 特别适合双屏情况下的DEMO开发,大大提高页面开发效率。 让你键盘上的F5键退休吧! 为什么选择smartF5 本插件具有以下特色: ...

YanisWang
2013/04/04
1.2W
0
高效 Java Web 开发框架--JessMA

JessMA 是功能完备的高性能 Full-Stack Web 应用开发框架,内置可扩展的 MVC Web 基础架构和 DAO 数据库访问组件(内部已提供了 Hibernate、MyBatis 与 JDBC DAO 组件),集成了 Action 拦截...

伤神小怪兽
2012/11/13
9.2K
3

没有更多内容

加载失败,请刷新页面

加载更多

​copyright到底是什么意思?

前几天写了篇文章“使用Apache协议的是自由软件吗?”,里面提到copyright和copyleft的概念。 有读者提出疑问: “关于copyleft一词,我记得大约1998年前后,我给Stallman先生发了一封邮件,...

卫_sir
今天
7
0
集合去重复那些事(一)

-List<Object>去重遇到的坑,去校验数据库,根据对象内的字段值。供大家参考和尝试,如有问题及错误请留言。 1、反例:先看下这个for i 的从list中remove for (int i = 0; i < sysUserJobs....

CarlDing
27分钟前
14
0
负载均衡的高可用集群(5)-haproxy的介绍及负载均衡服务器部署

一、Haproxy介绍 HAProxy是一个特别适用于高可用性环境的TCP/HTTP开源的反向代理和负载均衡软件。实现了一种事件驱动,单一进程模型,支持非常大的并发连接,是因为事件驱动模型有更好的资源...

osc_qatrfv06
27分钟前
12
0
灵魂拷问,上 Kubernetes 有什么业务价值?

本文整理自 2020 年 7 月 22 日《基于 Kubernetes 与 OAM 构建统一、标准化的应用管理平台》主题线上网络研讨会。文章共分为上下两篇,本文为上篇,主要和大家介绍上 Kubernetes 有什么业务价...

阿里巴巴云原生
28分钟前
7
0
基于tomcat远程注入Filter复现

昨天看了一篇大佬的文章远程注入webshell的强大操作,瞬间感觉到了大佬的无敌,花了点时间复现了一下,以本文作为记录 复现环境: 1)jdk1.8.0_102 2)tomcat 8.5.57 3)fastjson-1.2.47 我首先...

国产大熊猫
28分钟前
28
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部