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

2023-11-22 09:19:03 浏览数 (1)

表述(类的职责要单一)

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

优点

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

问题提出与解决

假设有一个类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

0 人点赞