博客
关于我
设计模式--单一职责原则的个人理解
阅读量:593 次
发布时间:2019-03-12

本文共 1086 字,大约阅读时间需要 3 分钟。

单一职责:一个类只能有一个职责,这个职责应当是明确且完整的。换句话说,一个类只能执行单一任务,并且具备执行这项任务所需的所有功能。

一个好的例子:CmdFactory

下面以一个实际的例子来说明单一职责的重要性。

CmdFactory 类

  • 主要职责:创建命令(Cmd)的实例
  • 内部机器
    • mCmdString:保存命令字符串
    • mCmdSplit:命令拆分器
    • mCmdTypeAnalyze:命令类型分析器
    • mCmdParaAnalyze:命令参数分析器
    • mCmdPathAnalyze:命令路径分析器

主要方法

  • GetCmdSplit()
  • GetCmdTypeAnalyze()
  • GetCmdParaAnalyze()
  • GetCmdPathAnalyze()
  • CreateCmd(Cmd cmd, CmdPara cmdPara, ...): 创建并返回新命令实例

这个工厂类的设计清晰明了,所有与命令创建相关的功能都集中在这里,没有其他额外功能。

一个不好的例子:CmdPathAnalyze

下面来看一个职责不明确的例子。

CmdPathAnalyze 类

  • (不好的)主要职责:分析路径
  • 内部机器
    • 存储路径元素的列表
    • 存储路径的分析结果
    • 存储路径连接的文件或文件夹指针

arters

  • 分析路径
  • 拆分路径
  • 检查路径存在性
  • 特殊路径分析

问题:这个类的方法涵盖了路径分析的所有功能,但它却嵌入到CmdBase类中,导致CmdBase的职责膨胀。这样看来,CmdBase不应该包含路径分析的逻辑,因为这应该由专门的分析器负责。

关于职责划分的注意事项

一个类的设计应当遵循"单一职责"原则,这样才能确保:

  • 明确性:类的功能和 responsibility 显而易见
  • 可扩展性:新增功能时不影响已有功能
  • 可测试性:单个类改变时,不影响其他类
  • 如何避免职责不清

    在项目刚起步时,许多开发者难免遇到功能过多的类。这通常发生在设计阶段不够细致时。好的实践包括:

  • 需求分析:和产品经理详细讨论需求,明确每个功能模块的需求
  • 模块划分:将大功能分解成几个独立的子功能
  • **清晰划分": 确保每个类只承担一部分责任
  • 文档记录:记录每个类的职责,保持开发过程中的清晰度
  • 总结

    职责单一的原则指导了我们如何设计高效代码。当一个类的职责明确时,它的功能也会更加稳定和易于维护。相反,在职责不明确的情况下,类可能会变得臃肿,不容易维护。

    在实际开发中,我们应当通过细致的需求分析,找到每个模块的核心职责,再将这些职责分配给不同的类或模块。这样实现的效果,就是一个干净、有责任分工的代码库。

    转载地址:http://hccxz.baihongyu.com/

    你可能感兴趣的文章
    GitHub完整记录数据库GHTorrent的下载和安装经验
    查看>>
    设计模式—— 三:依赖倒置原则
    查看>>
    因SGA分配错误无法启动数据库
    查看>>
    ORA-00020 超过当前最大连接数
    查看>>
    喝红茶是否会上火
    查看>>
    Android进阶解密读书笔记2——第2章:Android系统启动——第1、2小节
    查看>>
    Android进阶解密读书笔记3——第2章:Android系统启动——第3、4、5、6小节
    查看>>
    主线程中Looper的轮询死循环为何没有阻塞主线程?
    查看>>
    Gradle实战四:Jenkins持续集成
    查看>>
    使用RestTemplate,显示请求信息,响应信息
    查看>>
    wgcloud运维监控系统错误:防篡改校验错误次数大于10次,不再上报数据
    查看>>
    为什么WGCLOUD安装完后,启动服务端打不开网页
    查看>>
    iOS 开发官方文档链接收集
    查看>>
    linux学习笔记(四)基本用户管理与帮助命令
    查看>>
    小程序:防止父方法被子方法冒泡,使用catchtap
    查看>>
    vue报错 created hook错误
    查看>>
    此主机支持Intel VT-x,但Intel VT-x 处于禁用状态。
    查看>>
    12-面向对象1
    查看>>
    HDU - 4109 Instrction Arrangement
    查看>>
    Java位运算,负数的二进制表示形式,int类型最大值为什么是2的31次方-1
    查看>>