Swift-迪米特原则

2020-04-20  本文已影响0人  云之彼岸君

迪米特法则又叫做最少知识原则。其核心为一个类或对象应尽可能少的与其他实体发生相互作用。起初衷是为了降低类的耦合,但是需要注意,由于要复合迪米特法则,需要创建许多额外的中介类,过多的中介类会增加系统的复杂度,有时反而可能会得不偿失。所以在使用迪米特法则的时候要慎重。

这里我们用公司的老板每天需要处理的事情为例子

class Boss{
    var name : String
    init(name : String) {
        self.name = name
    }
    
    func dailyWork(customName : String )  { //如果老板一天内要和下面的类发生交互所执行的方法
        //按照现在的设计,老板完成一天的工作需要这样做 , 并且违反迪米特法则最小的依赖原则
        Customer(name: customName).talking(boss: self)
        Event().meeting(boss: self)
        Study().study(boss: self)
        
    }
}
//假如公司的老板一天下来非常的忙碌,他要跟不同的人开会等等

class Customer { //顾客
    var name : String
    
    init(name : String) {
        self.name = name
    }
    //客户与老板交谈
    func talking(boss : Boss)  {
        print("客户\(self.name)与老板\(boss.name)")
    }
}

class Event{ //老板要执行的会议类
    func meeting(boss : Boss)  { //要参加这个会议的老板
        print("\(boss.name)参加会议")
    }
}

class Study{ //老板还要进行培训学习这样的任务
    func study(boss : Boss) {
        print("\(boss.name)参加学习")
    }
}

let boss = Boss(name: "Jack")
boss.dailyWork(customName: "Mike")

如果要Boss类尽可能地去依赖更少的类那么我们就需要一个中介类去帮Boss做这些事情

class Helper{ //中介秘书类
    
    var boss : Boss  // 秘书需要和老板进行绑定
    
    init(boss : Boss) {
        
        self.boss = boss
    }
    
    func work(customName : String)  {
        Customer(name: customName).talking(boss: self.boss)
        Event().meeting(boss: self.boss)
        Study().study(boss: self.boss)
    }
}

此时Boss类所做的事情全部都交给了中介类来帮助实现了

class Boss{
    
    var helper : Helper!
    var name : String
    init(name : String) {
        self.name = name
        self.helper = Helper(boss : self)
    }
    
      func dailyWork(customName : String )  {
        //老板让中介类替他工作
        self.helper.work(customName: customName)
      }

}

咋一看来,貌似中介类的出现并没有对多依赖的场景进行优化。因为中介类与其他三个业务类的依赖依然存在,而且代码也比以前更多了,代码的复用性并没有得到很大的提升。但是如果我们做的是功能模块,加入Boss类是一个大的功能,其他三个是小的功能模块,通过中介类就可以实现更好的拆分和功能模块之间的通讯,这就是迪米特法则的重要核心。

上一篇下一篇

猜你喜欢

热点阅读