小王和你一起学习系列之设计模式-单一职责原则

单一职责原则,从字面上理解就是做一件事情。

单一职责原则应用的场景包括:

一个接口只做同一类事情

一个类只做同一类事情

一个方法只做一件事情

一段代码只做一件事情

咱们具体分析各个应用场景吧

一、一段代码

?

一段代码代表一种逻辑。代码是最细粒度,接口、类、方法都是由代码组成的。

二、一个方法

?

如果方法中的代码逻辑比较简单,哪怕有分支,有不同的逻辑处理,那么也是允许的。如果方法中的代码逻辑很复杂,各种条件判断,如果以后需求发生变更,导致代码发生更改,

修改的时候必然会小心翼翼,生怕改的代码对方法其他代码有影响,让方法产生新的bug。因为方法中的代码是紧耦合的。设计模式要求解耦,内聚。

这个时候就要修改方法,让方法只做一件事情。原来方法中有几个业务逻辑,抽取出来,形成不同的方法(抽取大方法,这是重构_改善既有代码设计中提到的)。本来想找一个代码例子,说明上面的复杂方法,感觉有些生搬硬套,各位童鞋还是结合自己写的项目中的代码来加深理解。

三、一个接口

?

增、删、查、改是我们经常遇到的业务场景。

举个例子。

淘宝网、京东商城都有前台类目的概念。

前台类目的增、删、查、改属于前台类目管理;点击前台类目跳转到后台这属于前台类目的查询逻辑处理。

这是两个没有关联的逻辑,并且两个业务的逻辑处理都很复杂,如果写在一个接口里面,管理起来很麻烦。所以应该分成两个接口来分别管理。

有同学会说了,按照一个接口处理一件事情来说,前台类目管理接口包括增加类目、修改类目、删除类目、查询类目id和code,这是4个业务逻辑,应该分成4个接口。

一个接口只做一件事情,什么才算一件事情,这里面有个划分和度量的问题。

增、删、查、改 虽然属于4个场景,但是每个场景的逻辑不很复杂,并且紧密相关,都属于维护前台类目的操作,可以写在一个接口里面。

?

四、一个类

?

这里的类不是实体类,而指的是接口的实现类

正常情况下,一个接口对应一个接口实现类

比如MVC结构,一个Controller类里面有多个service,每个service代表一个业务逻辑。service就是接口;serviceImpl就是接口的实现类。

如果两个接口逻辑很简单,可以考虑一个类实现多个接口,java里面可以实现多个接口,不能继承多个类。

欢迎各位童鞋吐槽

?

时间: 2024-10-20 03:05:08

小王和你一起学习系列之设计模式-单一职责原则的相关文章

学习设计模式 - 六大基本原则之单一职责原则

设计模式总共有六大基本原则,统称为SOLID (稳定)原则,分别是S-单一职责原则(Single Responsibility Principle), O-开闭原则(Open closed Principle),L-里氏替换原则(Liskov Substitution Principle),L-迪米特法则(Law of Demeter),I-接口隔离原则(Interface Segregation Principle),D-依赖倒置原则(Dependence Invension Principl

C#设计模式系列:单一职责原则(Single Responsibility Principle)

1.单一职责原则的核心思想 一个类应该有且只有一个变化的原因. 2.为什么要引入单一职责原则 单一职责原则将不同的职责分离到单独的类,每一个职责都是一个变化的中心.当需求变化时,这个变化将通过更改职责相关的类来体现.如果一个类拥有多于一个的职责,则这些职责就耦合到在了一起,那么就会有多于一个原因来导致这个类的变化.对于某一职责的更改可能会损害类满足其他耦合职责的能力.这样职责的耦合会导致设计的脆弱,以至于当职责发生更改时产生无法预期的破坏. 3.单一职责原则的优点 1>.可以降低类的复杂度,一个

单一职责原则--设计模式系列

定义 一个类只负责一项职责 职责扩散 什么叫职责扩散,就是职责再进行细化,就拿公司来说,好比客户的需求,需求是不断变化的,而且存在极大的不确定性,说不定哪天上司找到你要重新细化某个需求 所以最好在职责扩散到我们无法控制的程度之前,立刻对代码进行重构 栗子 我们先下面这段代码: class Animal: def __init__(self,name): self.name = name def breathe(self): print('%s用肺呼吸'%self.name) niu = Anim

学习大话设计模式03_单一职责原则

单一职责原则:一个类,应仅有一个引起它变化的原因 如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会削弱或者抑制这个类完成其他职责的能力.这种耦合会导致脆弱的设计,当变化发生时,设计会遭受到意想不到的破坏. 软件设计真正要做的许多内容,就是发现职责并把那些职责相互分享.如果你能够想到多于一个的动机去改变一个类,那么这个类就是具有多于一个的职责 学习大话设计模式03_单一职责原则

设计模式学习笔记(二) 设计基本原则之【单一职责原则】

单一职责原则(SRP: Single Responsibility Principle) 名词解释: 1) 职责:是指类变化的原因. 2) 职责扩散:就是因为某种原因,职责P被分化为粒度更细的职责P1和P2. 3) 可变类:是指创建该类的实例后,可以对其属性进行修改. 4)不可变类:是指创建该类的实例后,不可对其属性进行修改.不可变类是线程安全的. 1.应用场景 一个类T负责两个不同的职责:职责P1.职责P2.当由于职责P1需求发生改变而需要修改类T时,有可能会导致原来运行的职责P2功能发生故障

Caffe学习系列——工具篇:神经网络模型结构可视化

Caffe学习系列--工具篇:神经网络模型结构可视化 在Caffe中,目前有两种可视化prototxt格式网络结构的方法: 使用Netscope在线可视化 使用Caffe提供的draw_net.py 本文将就这两种方法加以介绍 1. Netscope:支持Caffe的神经网络结构在线可视化工具 Netscope是个支持prototxt格式描述的神经网络结构的在线可视工具,网址:  http://ethereon.github.io/netscope/quickstart.html  它可以用来可

Oracle学习系列3

Oracle学习系列3 ************************************************************************************ 多表查询: 1,SQL1999语法对多表查询的支持 2,分组统计及统计函数的使用 3,子查询,并结合多表查询,分组统计做复杂查询 4,数据库的更新操作 5,事务处理和数据库死锁 ****************************************************************

Python学习系列(六)(模块)

一,模块的基本介绍 1,import引入其他标准模块 标准库:Python标准安装包里的模块. 引入模块的几种方式: i)引入模块:import   moduleName ii)引入模块下的函数:from moduleName import function1,function2,-- iii)引入模块下的所有函数:from moduleName import * 使用模块里的函数的方法: moduleName.function(agrs) 示例: >>> import math >

我的Android 4 学习系列之开始入手:配置开发环境与理解Hello World!

p { padding-left: 10px; } 目录 如何安装Android SDK.创建开发环境和调试项目 移动设计中一些注意事项 使用Android虚拟设备.模拟器和其他开发工具 如何安装Android SDK.创建开发环境和调试项目 下载和安装Android SDK : 我的是window7系统,当然下载 SDK starter package 最合适了: http://developer.android.com/sdk/index.html 下载完打开压缩包如下: 然后把这个包解压到