美文网首页
Swift-迪米特原则

Swift-迪米特原则

作者: 云之彼岸君 | 来源:发表于2020-04-20 00:59 被阅读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类是一个大的功能,其他三个是小的功能模块,通过中介类就可以实现更好的拆分和功能模块之间的通讯,这就是迪米特法则的重要核心。

    相关文章

      网友评论

          本文标题:Swift-迪米特原则

          本文链接:https://www.haomeiwen.com/subject/qdmnbhtx.html