前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >设计模式 -- 单一职责原则

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

作者头像
xy_ss
发布2023-11-22 09:19:03
1220
发布2023-11-22 09:19:03
举报
文章被收录于专栏:浮躁的喧嚣

表述(类的职责要单一)

一个类只负责一种职责的工作,仅有一个原因会引起这个类的变化

优点

  • 类的可读性强,可维护性强
  • 类的复杂度低,一个类只负责一个功能,其逻辑简单

问题提出与解决

假设有一个类C,它负责俩个职责分别是P1和P2,当职责P1需求发生变化需要修改类C,有可能会导致原本正常运行的职责P2发送错误

遵循单一职责原则,分别建立俩个类C1和C2,让C1完成P1,C2完成P2,这样无论修改C1还是C2都不会影响彼此

示例

需求V1:员工的工资计算,刚开始,我们会新建一个员工类,类中有一个计算工资的方法

代码语言:javascript
复制
class Employee{
    func calculateSalary(name:String) {
        print("\(name)的工资是100")
    }
}

let employee = Employee()
employee.calculateSalary(name: "小明")
//小明的工资是100

需求V2:因为员工职级不同,因此工资也不一样,所以遵循单一职责原则需要将Employee类细分为各个职级类,各职级类一样实现代码和Employee一样,只是方法calculateSalary有所不同,在实际开发中,考虑将Employee定义为协议,各职级实现协议,这样便方便扩展

代码语言:javascript
复制
protocol EmployeeProtocol{
    func calculateSalary(name:String)
}

class Manager:EmployeeProtocol{
    func calculateSalary(name:String) {
        print("\(name)的工资是1000")
    }
}

class Staff:EmployeeProtocol{
    func calculateSalary(name:String) {
        print("\(name)的工资是100")
    }
}

let manager = Manager()
manager.calculateSalary(name: "经理")  //经理的工资是1000
let staff = Staff()
staff.calculateSalary(name: "职员")  //职员的工资是100

参考:https://www.cnblogs.com/LeeGof/p/5704014.html

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-08-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 表述(类的职责要单一)
  • 优点
  • 问题提出与解决
  • 示例
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档