热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

设计模式-单一职责原则

设计模式-单一职责原则单一职责原则使用的是创建型模式创建型模式创建型模式对类进行抽象重点,创建型模式能够将对象的创建和和对象的使用分离。即使用创建型模式能够使得对象的创建,对象的使

设计模式-单一职责原则
单一职责原则使用的是创建型模式

创建型模式

创建型模式对类进行抽象

重点,创建型模式能够将对象的创建和和对象的使用分离。即使用创建型模式能够使得对象的创建,对象的使用分离。重点在于分离。

什么是单一的职责原则

设计模式有六大基本原则,单一职责原则,里氏替换原则,依赖倒置原则,接口隔离原则,迪米特法则,开闭原则。
其中创建型模式符合单一职责原则。

单一职责原则

即SRP 用户角色管理等模块,使用的是RBAC模型

RBAC 一种以角色为储存的控制,使用RBAC 不赋予权限,赋予角色,例如windows的用户管理,使用的是赋予角色,对用户进行管理,这种方式为RBAC,目的在于使得用户和权限分离。

设计一个用户管理,依据单一职责模型,设计以下的结构。

该结构定义一些管理用户的,增加用户的一些内容,写入一个接口中,然后进行实现。

该接口具有以上的问题。
用户的属性(是否为注册用户,vip用户等等),用户的行为(增加用户,删除用户)没有分开。
该接口一团糟!
应该用户的信息,用户的行为抽取为一个接口,然后一个接口继承这两个接口
更改的如下所示

why? 为什么要分离,因为单一职责原则,当使用单一职责原则的时候,每个接口,每个类需要承担单一的职责,不应该承担过多的原则,易于维护

核心 ,一个接口只有一个原则!一个接口只能负责一件事情,只有一个原因能引起其变化

实现一个电话的接口

这个接口包含两个职责,协议管理和数据传送。
dial和chat为通话,该通话和拨打电话,使用了同时都和协议有关系,如果要更改协议,那么这两个接口的内容都需要进行更改。由于一个接口存在两个职责,所以该接口需要划分为两个接口

此时存在一个关联关系,拨打电话和协议的实现,两者之间存在关联关系,此关联关系为静态关联

这个类图完全符合单一职责的原则。每个状态只决定一件事情。每个状态的更改只改变一件事情。

好处 复杂度降低 可读性提高 可维护性增强 变更引起的风险降低(因为变更的时候如果每个接口只负责一个单一的原则,那么一个接口的修改对其他没有影响,这样降低了整体的复杂度)

单一原则适用于方法

刀就是刀,叉就是叉,1就是1,0就是0.没有中间态,每个方法也同样的适用于单一原则,每个方法也同样的只承担一个内容。一个作用。

总结

This is sometimes hard to see
这个有时候很难说!
对接口尽量做到单一原则,类的做到引起一个原因引起的变化。

www.iming.info


推荐阅读
  • 申请地址:https://developer.apple.com/appstore/contact/?topic=expedite 常见申请理由:1. 我们即将发布新产品,这是一个媒体活动,我们无法承担任何风险,因此在多个方面努力提升应用质量。 ... [详细]
  • 本文详细介绍了如何在Java Web服务器上部署音视频服务,并提供了完整的验证流程。以AnyChat为例,这是一款跨平台的音视频解决方案,广泛应用于需要实时音视频交互的项目中。通过具体的部署步骤和测试方法,确保了音视频服务的稳定性和可靠性。 ... [详细]
  • 在操作系统中,阻塞状态与挂起状态有着显著的区别。阻塞状态通常是指进程因等待某一事件(如I/O操作完成)而暂时停止执行,而挂起状态则是指进程被系统暂时移出内存,以释放资源或降低系统负载。此外,本文还深入分析了`sleep()`函数的实现机制,探讨了其在不同操作系统中的具体实现方式及其对进程调度的影响。通过这些分析,读者可以更好地理解操作系统如何管理进程的不同状态以及`sleep()`函数在其中的作用。 ... [详细]
  • 2019-2020学年 20174325 叶竞蔚 《网络对抗技术》实验六:Metasploit基础应用
    本实验旨在掌握Metasploit框架的基本应用方法,重点学习三种常见的攻击方式及其实施思路。实验内容包括一次主动攻击(如MS08-067)、一次针对浏览器的攻击(如MS11-050)以及一次针对客户端的攻击(如Adobe漏洞利用)。此外,还包括成功应用一个辅助模块。 ... [详细]
  • 本文通过一个示例展示了如何使用HTML和CSS美化并实现响应式的按钮组。 ... [详细]
  • 本文介绍了 Oracle SQL 中的集合运算、子查询、数据处理、表的创建与管理等内容。包括查询部门号为10和20的员工信息、使用集合运算、子查询的注意事项、数据插入与删除、表的创建与修改等。 ... [详细]
  • 本文探讨了SSD购买后是否需要进行4K对齐的问题,并详细解释了4K对齐的原理及其重要性。通过对比机械硬盘与固态硬盘的结构,文章深入分析了4K对齐对SSD性能的影响,并提供了具体的对齐方法。 ... [详细]
  • 深入浅出解读奇异值分解,助你轻松掌握核心概念 ... [详细]
  • 为了在Fragment中直接调用Activity的方法,可以通过定义一个接口并让Activity实现该接口来实现。具体步骤包括:首先在Fragment中声明一个接口,并在Activity中实现该接口。接着,在Fragment中通过类型转换检查Activity是否实现了该接口,如果实现了则调用相应的方法。这种方法不仅提高了代码的解耦性,还增强了模块间的通信效率。此外,还可以通过ViewModel或LiveData等现代Android架构组件进一步优化这一过程,以实现更加高效和可靠的通信机制。 ... [详细]
  • 自回归与非自回归模型如何融合?预训练模型BANG提供可能解决方案
    近年来,预训练技术的快速发展显著提升了自然语言生成的性能。然而,自回归模型和非自回归模型在生成质量和效率上各有优劣。微软研究院提出了一种新的预训练模型BANG,通过巧妙地结合两者的优点,提供了一种有效的解决方案。该模型不仅在生成质量上表现出色,还在推理速度上实现了显著提升,为自然语言生成任务带来了新的可能性。 ... [详细]
  • 如何在微信公众平台集成新浪云服务应用摘要:新浪云服务平台SinaAppEngine(简称SAE)自2009年启动内部研发,并于同年对外开放。本文详细介绍了如何利用SAE的强大功能,在微信公众平台上构建高效、稳定的云服务应用程序,涵盖从环境配置到应用部署的全流程,为开发者提供详尽的技术指导与实践案例。 ... [详细]
  • 注:写博客或者项目的README文档经常用到markdown语法,所以markdown的语法做了一个总结,本文是基于【markdown】基 ... [详细]
  • 2017-09-07前端日报精选JavaScriptEventLoop机制详解与Vue.js中实践应用Redux基础与实践如何用js获取虚拟键盘高度?( ... [详细]
  • 【转】JS键盘按钮keyCode及示例大全(JS前端)
    文章目录以功能区分布以keycode编号顺序分布简记表使用示例:组合键获取用户按下的键javascript判断是否按回车键屏蔽按键组合健获取键和相应值的js回目录 ... [详细]
  • 活动介绍 人工智能是一门极富挑战性的科学,从事这项工作的人必须懂得计算机知识,心理学和哲学。人工智能是包括十分广泛的科学,它由不同的领域组成,如机器学习,计算机视觉等等。总的 ... [详细]
author-avatar
谭宏景
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有