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

设计模式 -- 依赖倒置原则

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

表述(面向接口编程)

“针对接口编程,不要针对实现编程”就是依赖倒转原则的最好体现:接口(也可以是抽象类)就是一种抽象,只要不修改接口声明,大家可以放心大胆调用,至于接口的内部实现则无需关心,可以随便重构。这里,接口就是抽象,而接口的实现就是细节

抽象指的是委托/协议,细节就是具体的实现类,使用接口或者抽象类的目的是制定好规范和契约,而不去涉及任何具体的操作,把展现细节的任务交给它们的实现类去完成

优点

代码结构清晰,维护容易

问题提出与解决

类A直接依赖类B,假如需要将类A改为依赖类C,则必须通过修改类A的代码来达成。这种场景下,类A一般是高层模块,负责复杂的业务逻辑;类B和类C是低层模块,负责基本的原子操作;假如修改类A,会给程序带来不必要的风险

遵循依赖倒置原则,将类A修改为依赖接口I,类B和类C各自实现接口I,类A通过接口I间接与类B或者类C发生联系,则会大大降低修改类A的几率

示例

需求V1:类SalaryManage(类似上面说的类A)负责工资的管理;Staff(类似上面说的类B)是职员类,现在要通过SalaryManage类来给职员发放工资了

代码语言:javascript
复制
class Staff{
    var name:String
    
    init(name:String) {
        self.name = name
    }
    
    func calculateSalary() {
        print("\(name)的工资是100")
    }
}

class SalaryManage{
    func calculateSalary(stasff:Staff) {
        stasff.calculateSalary()
    }
}

let salary = SalaryManage()
let staff = Staff.init(name: "职员")
salary.calculateSalary(stasff: staff)  //职员的工资是100

需求V2:现在假设需要给经理发工资,发现工资管理类SalaryManage没法直接完成这个功能,需要我们添加新的方法,才能完成,那么只能去修改SalaryManage类来满足业务的需求。产生这种现象的原因就是SalaryManage与Staff之间的耦合性太高了,必须降低它们之间的耦合度才行。因此我们引入一个委托EmployeeProtocol,它提供一个发放工资的方法定义

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

class SalaryManage{
    func calculateSalary(employee:EmployeeProtocol) {
        employee.calculateSalary()
    }
}

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

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

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

采用依赖倒置原则给多人并行开发带来了极大的便利,比如在上面的例子中,刚开始SalaryManage类与Staff类直接耦合时,SalaryManage类必须等Staff类编码完成后才可以进行编码和测试,因为SalaryManage类依赖于Staff类。按照依赖倒置原则修改后,则可以同时开工,互不影响,因为SalaryManage与Staff类一点关系也没有,只依赖于协议EmployeeProtocol。参与协作开发的人越多、项目越庞大,采用依赖导致原则的意义就越重大

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

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

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

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

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

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