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

设计模式-单一职责原则

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

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

创建型模式

创建型模式对类进行抽象

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

什么是单一的职责原则

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

单一职责原则

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

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

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

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

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

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

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

实现一个电话的接口

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

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

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

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

单一原则适用于方法

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

总结

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

www.iming.info


推荐阅读
  • YB02 防水车载GPS追踪器
    YB02防水车载GPS追踪器由Yuebiz科技有限公司设计生产,适用于车辆防盗、车队管理和实时追踪等多种场合。 ... [详细]
  • 优化联通光猫DNS服务器设置
    本文详细介绍了如何为联通光猫配置DNS服务器地址,以提高网络解析效率和访问体验。通过智能线路解析功能,域名解析可以根据访问者的IP来源和类型进行差异化处理,从而实现更优的网络性能。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 在 Windows 10 中,F1 至 F12 键默认设置为快捷功能键。本文将介绍几种有效方法来禁用这些快捷键,并恢复其标准功能键的作用。请注意,部分笔记本电脑的快捷键可能无法完全关闭。 ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • 本文介绍了一款用于自动化部署 Linux 服务的 Bash 脚本。该脚本不仅涵盖了基本的文件复制和目录创建,还处理了系统服务的配置和启动,确保在多种 Linux 发行版上都能顺利运行。 ... [详细]
  • 在Linux系统中配置并启动ActiveMQ
    本文详细介绍了如何在Linux环境中安装和配置ActiveMQ,包括端口开放及防火墙设置。通过本文,您可以掌握完整的ActiveMQ部署流程,确保其在网络环境中正常运行。 ... [详细]
  • 如何配置Unturned服务器及其消息设置
    本文详细介绍了Unturned服务器的配置方法和消息设置技巧,帮助用户了解并优化服务器管理。同时,提供了关于云服务资源操作记录、远程登录设置以及文件传输的相关补充信息。 ... [详细]
  • DNN Community 和 Professional 版本的主要差异
    本文详细解析了 DotNetNuke (DNN) 的两种主要版本:Community 和 Professional。通过对比两者的功能和附加组件,帮助用户选择最适合其需求的版本。 ... [详细]
  • 深入解析 Spring Security 用户认证机制
    本文将详细介绍 Spring Security 中用户登录认证的核心流程,重点分析 AbstractAuthenticationProcessingFilter 和 AuthenticationManager 的工作原理。通过理解这些组件的实现,读者可以更好地掌握 Spring Security 的认证机制。 ... [详细]
  • 深入解析Java枚举及其高级特性
    本文详细介绍了Java枚举的概念、语法、使用规则和应用场景,并探讨了其在实际编程中的高级应用。所有相关内容已收录于GitHub仓库[JavaLearningmanual](https://github.com/Ziphtracks/JavaLearningmanual),欢迎Star并持续关注。 ... [详细]
  • 探讨ChatGPT在法律和版权方面的潜在风险及影响,分析其作为内容创造工具的合法性和合规性。 ... [详细]
  • 本文详细介绍如何使用 Python 集成微信支付的三种主要方式:Native 支付、APP 支付和 JSAPI 支付。每种方式适用于不同的应用场景,如 PC 网站、移动端应用和公众号内支付等。 ... [详细]
  • 本文详细介绍了如何利用Go语言和WebSockets技术构建一个高效的实时聊天系统。随着网络应用的日益复杂化,实时交互成为了提升用户体验的关键要素之一。通过本指南,开发者可以学习到最新的技术和最佳实践。 ... [详细]
  • 本文将详细介绍小蚁智能行车记录仪的各项性能,包括其1296P高清分辨率的实际表现及ADAS辅助驾驶系统的功能测试。通过白天、夜晚及低光环境下的视频测试,全面评估这款设备的实用性。 ... [详细]
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社区 版权所有