Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >设计模式(一):单一职责原则

设计模式(一):单一职责原则

原创
作者头像
xujjj
修改于 2019-06-28 11:11:22
修改于 2019-06-28 11:11:22
8650
举报
文章被收录于专栏:IT界的泥石流IT界的泥石流

什么是单一职责原则?

定义:应该有且仅有一个原因引起类的变更

为什么要有单一职责原则?

单一职责原则为我们提供了一个编写程序的思想,要求我们在编写类,抽象类,接口时,要使其功能职责单一,将导致其变更的因素缩减到最少。如果一个类的职责过多,则多个职责耦合在一起,那么就会有多个因素导致这个类发生变化,并且一个职责的变化可能会影响到其他的职责,不利于可重用性。

单一职责具有以下优点:

  • 降低类的复杂度;
  • 提高类的可读性,提高系统的可维护性;
  • 降低变更引起的风险;

单一职责的实现与思考

例:有一个需求要求实现:根据原材料加工生产出产品 A 和产品 B

可见通过 productA 和 productB 方法是可以正常加工生产出 A 产品和 B 产品,现由于 A 产品销量不好,工厂决定将 A 产品材料加工规则改变,B 产品不变。则按照上面代码的逻辑,B 产品也会使用新的材料加工规则,故不符合新的需求。

我们可以看出 ProductFactory 这个类有两个引起其发生变化的因素:A 产品更改因素和 B 产品更改因素,这就与单一职责原则相违背。

所以对于工厂的需求,按照单一职责原则我们应该这样设计:

将原先的 ProductFactory 设计成接口,通过实现该接口生成 AProductFactory类和 BProductFactory 分别生产 A 和 B

通过以上代码,我们可以发现无论任何一个产品改动的时候,也不会影响到其他产品的生产,即使后续新增产品,也可以横向添加XProductFactory 生产产品。

但是很遗憾 ProductFactory 依旧不是职责单一的,从纵向方向来看,ProductFactory 具有颗粒更小的职责:材料加工,生产产品的职责。为了贯彻单一职责的思想,我们将两个职责设计成两个接口

通过实现 IProductFactory,IMaterialProcessing 两个接口实现材料加工类和产品工厂类,通过对应的产品工厂类生成产品。至此代码已符合职责单一原则,显而易见地这也从一个类即可实现的功能变成六个类去实现,若只是单单几个小功能可以如上设计。而对于功能繁多的中大型系统而言,如此设计会导致功能实现繁琐,后期也不利于维护。

规矩是死的,人是活的

我们在接口设计的时候需要尽量做到职责单一,生搬硬套单一职责原则会引起类的爆增,不利于维护同时加大系统的复杂性。单一职责最难划分的是职责,类的职责和变更因素因项目而不同,因环境而不同,并不是要求类的功能拆分的越细越好,对类的功能细分需要我们有足够的开发经验和能力去具体分析。

下期文章《设计模式之里氏替换原则》

更多知识干货,欢迎关注我们的微信公众号:IT界的泥石流

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【JQuery框架】五大选择器“全家桶”详解!!!
今天来和大家分享一下jQuery的五种选择器的详细使用方法,那么何为选择器?从功能上来讲,它能够筛选具有相似特征的元素标签,在我们想要对具有相似特征的元素进行集中或统一操作时是十分有用的,
灰小猿
2022/05/05
1.9K0
JavaWeb——JQuery之DOM操作应用及实践案例总结(DOM内容操作、DOM属性操作、CRUD操作)
【注意】:prop和attr的区别,如果操作的是元素的固有属性(非自定义的),建议使用prop;若是自定义属性,建议用attr。
Winter_world
2020/09/25
3.1K0
JavaWeb——JQuery之DOM操作应用及实践案例总结(DOM内容操作、DOM属性操作、CRUD操作)
JQuery-学习笔记03【基础——DOM操作】「建议收藏」
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/10/01
2K0
JQuery-学习笔记03【基础——DOM操作】「建议收藏」
JQuery的学习
JQuery基础: 1. 概念: * 一个JavaScript框架,简化JS开发。 * jQuery是一个快速、简洁的JavaScript框架,是继Prototype之后又一个优秀的JavaScript代码库(或JavaScript框架)。jQuery设计的宗旨是“write Less,Do More”,即倡导写更少的代码,做更多的事情。它封装JavaScript常用的功能代码,提供一种简便的JavaScript设计模式,优化HTML文档操作、事件处理、动画设计和Ajax交互。 * JavaScript
Rochester
2020/09/01
16.9K0
jQuery基础
一 jQuery是什么? [1]   jQuery由美国人John Resig创建,至今已吸引了来自世界各地的众多 javascript高手加入其team。 [2]   jQuery是继prototype之后又一个优秀的Javascript框架。其宗旨是——WRITE LESS,DO MORE! [3]  它是轻量级的js库(压缩后只有21k) ,这是其它的js库所不及的,它兼容CSS3,还兼容各种浏览器 [4]  jQuery是一个快速的,简洁的javaScript库,使用户能更方便地处理HTMLdo
用户1214487
2018/01/24
2.2K0
JavaWeb18-jquery学习笔记(Java全栈开发)
jquery一.筛选 筛选与之前的选择器雷同,筛选提供的都是函数. 1. 过滤 eq(index|-index):获取指定索引的元素.如果是正数,索引从0开始;若是负数,倒着数从1开始. first():第一个 last():最后一个 hasClass(...):判断元素是否含有特定的样式 filter(...):筛选出与指定表达式匹配的元素集合 is(...):判断元素是否符合指定的选择器 has(...):含有特定后代的元素 not(...):删除与指定表达式匹配的元素 slice(start
Java帮帮
2018/03/19
7K0
JavaWeb18-jquery学习笔记(Java全栈开发)
JavaWeb——JQuery之基础案例实战(实现表格隔行换色、实现全选全不选、QQ表情选择、下拉列表选中条目左右选择功能)
【需求】:将数据行的奇数行背景色设置为 pink,偶数行背景色设置为 yellow
Winter_world
2020/09/25
2.7K0
JavaWeb——JQuery之基础案例实战(实现表格隔行换色、实现全选全不选、QQ表情选择、下拉列表选中条目左右选择功能)
第50次文章:JQuery基础
tips:window.onload 和 $(function)异同:两者的功能相同,都是等到页面加载结束之后,再执行内部的代码。但是有一定的区别,主要是window.onload只能定义一次,如果定义多次,后边的会将前边的覆盖掉,$(function)可以定义多次的。
鹏-程-万-里
2020/01/02
1.7K0
HTML5+CSS3+JavaScript从入门到精通-21
HTML5+CSS3+JavaScript从入门到精通 作者:王征,李晓波 第二十一章 JavaScript的框架库jQuery 案例 21-01 jQuery的使用 <!DOCTYPE html> <!--web21-01--> <!-- $("#h01"), #后接的是id,要加引号 --> <html> <head> <meta charset="utf-8" /> <title>jQuery的使用</title> <script src="jquery-1
qiqi_fu
2021/12/06
3.1K0
HTML5+CSS3+JavaScript从入门到精通-21
javaWeb核心技术第五篇之jQuery
- 概述 - jQuery是一个优秀的javascript框架(js类库),兼容css3和各大浏览器,提供dom,events,animate,ajax等简易的操作。并且jQuery有非常丰富的插件,大多数功能都有相应的插件解决方案。jQuery的宗旨是write less, do more. (写的更少,做的更多) - jQuery入门 - jQuery和html整合 - 下载 - 下载地址:www.jquery.com - 使用script的src属性即可
海仔
2019/08/26
8.2K0
jQuery入门基础——选择器
What:jQuery是JavaScript的类库,封装了很多js代码。类似java中的类库一样里面一个类中有很多别人写好的功能。90%以上的公司都在用jQuery。划重点,这句话要考
用户10196776
2022/11/18
10K0
jQuery入门基础——选择器
jQuery基础
使用jQuery快速高效制作网页交互特效 第一章-JavaScript基础 上机练习1 练习——统计包含“a”或“A”的字符串的个数 需求说明:使用数组存储一组字符串,并统计包含“a”或“A”的字符串的个数 关键代码: <script type="text/javascript"> var a = ["America","Greece","Britain","Canada","China","Egypt"]; var count = 0; for(var i in a) {
星辰xc
2022/04/09
7.6K0
jQuery基础
JavaWeb——JQuery之高级操作应用及实践案例总结(动画、遍历、事件绑定)
【注意】:如果遍历中加判断条件,当前function返回为false,则结束循环(相当于js中使用的break),如果返回为true,则结束本次循环,继续下次循环(相当于js中使用的continue);
Winter_world
2020/09/25
9.6K0
JavaWeb——JQuery之高级操作应用及实践案例总结(动画、遍历、事件绑定)
jQuery基础系列
jquery的入口函数是在html所有标签都加载后才执行,而JavaScript的window.onload事件是等到所有内容加载完后才执行。
达达前端
2019/07/03
2.7K0
jQuery基础系列
JQuery高级应用
toggle([speed],[easing],[fn]) :切换,显示则隐藏,隐藏则显示
乐心湖
2021/01/18
6.2K0
JQuery高级应用
jQuery 选择器使用方法
下面的代码,只有外层段落的字体会改变颜色,里层不会,因为里层是属于 divInner 的直系元素
Remember_Ray
2020/03/08
4.8K0
jQuery的使用
1.需求分析 在首页中(logo的上方)显示一个广告图片(页面加载后,间隔3秒弹出广告图片,再间隔3秒后隐藏广告图片)。【使用jQuery实现】
用户5927264
2019/07/31
8.4K0
前端基础:jQuery
jQuery 能做的 JavaScript 也都能做,但使用 jQuery 能大幅提高开发效率
RendaZhang
2020/09/08
13.7K0
前端基础:jQuery
jQuery基础--选择器
jQuery选择器是jQuery为我们提供的一组方法,让我们更加方便的获取到页面中的元素。注意:jQuery选择器返回的是jQuery对象。
eadela
2019/09/29
8880
jQuery选择器大全(48个代码片段+21幅图演示)
选择器是jQuery最基础的东西,本文中列举的选择器基本上囊括了所有的jQuery选择器,也许各位通过这篇文章能够加深对jQuery选择器的理解,它们本身用法就非常简单,我更希望的是它能够提升个人编写jQuery代码的效率。本文配合截图、代码和简单的概括对所有jQuery选择器进行了介绍,也列举出了一些需要注意和区分的地方。 一、基本选择器 1. id选择器(指定id元素) 将id="one"的元素背景色设置为黑色。(id选择器返单个元素) $(document).ready(function () {
牛嗷嗷
2018/03/30
5.1K0
相关推荐
【JQuery框架】五大选择器“全家桶”详解!!!
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档