面向对象类设计的五大原则(一)单一职责原则Single Responsibility Principle
引言
面向对象类设计,或者说是面向对象设计,有五大原则:
- Single Responsibility Principle 单一职责原则
- Open Closed Principle 开闭原则
- Liskov Substitution Principle 里氏替换原则
- Dependency Inversion Principle 依赖反转原则
- Interface Segregation Principle 接口隔离原则
简介
今天我们要接触的是SRP,单一职责原则。
我觉得这些原则的目的就是要实现类的高内聚、低耦合。高内聚high cohision和低耦合low couple在很多时候都是我们的目标,不管我们引入设计模式,进行架构分析、设计、提高复用性,解耦decouple是我们共同的目标。
There should never be more than one reason for a class to change.
类的改变不应该由一个以上的原因导致,也就是说不应该有一个以上的原因可以导致类的改变。
如果类的职责超过一个,这些职责之间就会产生耦合。改变一个职责,可能会影响和妨碍类为其他人服务的功能。这种类型的耦合将会导致脆弱的设计,在修改的时候可能会引入未逾期的问题。
如上图所示,Rectangle类有两个方法:一个是在屏幕上画矩形,一个是计算矩形的面积。两个不同的应用会使用Rectangle类,一个应用使用Rectangle来帮助计算面积,它从来不会在屏幕画矩形。另外一个是图形界面的应用,也可能会计算面积,但是肯定会在屏幕画矩形。
当前的设计就违反了SRP原则,Rectangle类有两个职责,一个是为数学模型提供几何的矩形,计算面积;另外一个职责是为图形用户界面提供矩形的显示。
这个违反SRP原则的设计会导致很多严重的问题。首先,在计算几何应用中必须包含GUI。因为计算几何应用可能就是一个控制台程序,不需要用户界面,但是由于需要使用这个违反SRP原则的类,就必须要包含GUI的类库,在编译的时候要同时编译,在部署的时候还增加了部署的内容,而且这些内容可能永远都不会被用到。
其次,如果图形应用的变化,需要修改Rectangle类的话。我们的计算几何应用也必须要重新编译和部署,因为它也引用了相同的Rectangle类,如果不那么做的话,可能会发生意外的错误(因为Rectangle类被修改了,不知道有没有什么影响)。
好一点的做法是将Rectangle分解为两个类,如下图所示
{
public void Dial(string no);
public void Hangup();
public void Send(char c);
public char Reveive();
}
我们中的大多数人认为上面的接口已经设计的不错了,四个功能也都是modem的功能。
转载于:https://www.cnblogs.com/virusswb/archive/2010/06/29/OO-Class-Design-Single-Responsibility-Principle.html
面向对象类设计的五大原则(一)单一职责原则Single Responsibility Principle相关推荐
- Java设计原则之单一职责原则、开闭原则、里氏代换原则
文章目录 面向对象设计原则概述 单一职责原则 开闭原则 里氏代换原则 面向对象设计原则概述 软件的可维护性(Maintainability)和可复用性(Reusability)是两个非常重要的用于衡量 ...
- 面向对象的七种原则:单一职责原则,开放关闭原则
我们的知识星球马上就要开始更新设计模式了,在更新设计模式之前,我们是不是需要做一些准备呢?否则设计模式中一些遵循的原则大家会一头雾水,所以我今天来给大家说一些面向对象的七种原则,有人说是6种有人说是7 ...
- 经典设计原则:单一职责原则(SRP)
本文详解设计原则中的单一职责原则,目的还是提高代码的可读性.可扩展性.复用性.可维护性等. 目录 1. 单一职责原则(SRP) 2. 如何理解单一职责原则? 3. 如何判断类的职责是否足够单一? 4. ...
- 七大设计原则之单一职责原则应用
目录 1 单一职责原则介绍 2 单一职责原则应用 1 单一职责原则介绍 单一职责(Simple Responsibility Pinciple,SRP)是指不要存在多于一个导致类变更的原因.假设我们有 ...
- SOLID原则:单一职责原则(SRP)
SOLID:SOLID 原则并非单纯的1个原则,而是由5个设计原则组成,它们分别是:单一职责原则.开闭原则.里式替换原则.接口隔离原则和依赖反转原则,SOLID 由5个设计原则的头一个字母组成. 如何 ...
- 设计模式六大原则(一)----单一职责原则
设计模式六大原则之[单一职则原则] 一.什么是单一职责原则 首先, 我们来看单一职责的定义. 单一职责原则,全称Single Responsibility Principle, 简称SRP. A cl ...
- 【设计模式六大原则】:单一职责原则-带你走梦幻西游(一)
依赖倒置原则(二) 开闭原则(三) 迪米特原则-带你走进梦幻西游(四) 里氏替换原则(五) 接口隔离原则(六) 定义 单一职责原则的英文名称是Single Responsibility P ...
- 接口隔离原则和单一职责原则区别
接口隔离原则和单一职责原则区别 单一职责原则是备受争议的原则,根据不同的业务逻辑,它会将系统功能模块划分成不同种类,产生多样的接口,同时每个接口尽量只包含一个功能(方法). 而产生争议的原因就是这个业 ...
- 设计模式---面向对象设计原则之单一职责原则
单一职责原则是最简单的面向对象设计原则,它用于控制类的粒度大小.单一职责原则定义如下: 单一职责原则(Single Responsibility Principle, SRP):一个类只负责一个功能领 ...
- 面向对象五大原则_1.单一职责原则amp;2.里氏替换原则
单一职责原则:Single Responsibility Principle (SRP) 一个类.仅仅有一个引起它变化的原因.应该仅仅有一个职责.每个职责都是变化的一个轴线.假设一个类有一个以上的职责 ...
最新文章
- python内置数据结构之dict
- 重磅直播|慕尼黑工业大学博士详解室内SLAM中的几何约束
- 塑料:泡两天澡我就消失了?酶降解塑料居然可以这么快 | Nature
- 生物化学与分子生物学分析技术 Analytical Techniques in Biochemistry and Molecular Biology 英文原版
- 三十一、Vue框架赶紧来了解一下
- spring中bean的高级属性之list, set, map以及props元素(含举例)
- 超全PHP学习资源整理:入门到进阶系列
- 机器学习问题总结(03)
- Anaconda卸载与重装过程记录
- 测绘工程所用软件评析
- 函数式编程:如何高效简洁地对数据查询与变换
- 【java】java 如何抛出 sleep interrupted
- linux 重定向_Linux视频教程分享,零基础在家你也可以学的会
- EOS.IO技术学习
- 使用layui 做后台管理界面,在Tab中的链接点击后添加一个新TAB的解决方法
- tensorflow2.0对应python版本_TensorFlow2.1.0最新版本安装详细教程
- 【Java】URL下载网络资源(CloudMusic)
- python两个excel做匹配_python链接两张excel表格数据-如何用python从excel中同时提取两个列的数据,并生......
- 三插头内部结构图_三孔插座内部结构
- 【lomoyi笔记】2020.7.31VMware虚拟机安装黑苹果macOS Catalina10.15
热门文章
- demo2 Kafka+Spark Streaming+Redis实时计算整合实践 foreachRDD输出到redis
- MyBatis实现分页
- 在mininet中测试TCP、UDP带宽并作图
- Android ADT 无法在线安装,离线下载ADT压缩包方法。SDK Manager无法更新
- 反射:集合泛型的本质
- 机器学习:过拟合问题与其正则化解决
- BZOJ1646[Usaco2007 Open] 抓住那头牛
- java 动态属性_Java 类动态添加属性字段的操作
- r语言html帮助是什么东西,R语言帮助的使用
- python代码价格_在Python中如何用代码求出超过某价格的且受欢迎程度top5的菜品名?...