软件设计原则-迪米特法则

133 阅读2分钟

迪米特法则

迪米特法则又叫最少知识原则。

只和你的直接朋友交谈,不跟、阳生人,说话(Talk only to your immediate friends and not to strangers).

其含义是:如果两个软件实体无须直接通信,那么就不应当发生直接的相互调用,可以通过第三方转发该调用。其目的是降低类之间的耦合度,提高模块的相对独立性.

迪米特法则中的〝朋友〞是指:当前对象本身、当前对象的成员对象、当前对象所创建的对象、当前对象的方法参数等,这些对象同当前对象存在关联、聚合或组合关系,可以直接访问这些对象的方法。 下面看一个例子来理解接口隔离原则

【例】明星与经纪人的关系实例

明星由于全身心投入艺术,所以许多日常事务由经纪人负责处理,如和粉丝的见面会,和媒体公司的业务洽淡等。这里的经纪人是明星的朋友,而粉丝和媒体公司是陌生人,所以适合使用迪米特法则。

//粉丝类
class Fans{
    //粉丝的姓名
    var name:String
    init(name:String) {
        self.name = name
    }
}
//明星类
class Star{
//    明星的姓名
    var name:String
    init(name:String) {
        self.name = name
    }
}
//媒体公司类
class Company{
//    公司名称
    var name:String
    init(name:String) {
        self.name = name
    }
}
class Agent{
//    聚合了三个类
    var star:Star
    var fans: Fans
    var company:Company
    
    init(star:Star,fans: Fans,company:Company) {
        self.star = star
        self.fans = fans
        self.company = company
    }
//    和粉丝见面的方法
    func metting(){
        print(star.name ,"和",fans.name,"见面")
    }
//    和媒体公司洽谈的方法
    func business(){
        print(star.name ,"和",company.name,"洽谈")
    }
}
​

测试代码

var star = Star(name: "林青霞")
var fans = Fans(name: "张三")
var company = Company(name: "阿卿媒体公司")
var agent = Agent(star: star, fans: fans, company: company)
agent.metting()//和粉丝见面
agent.business()//和媒体公司洽谈业务

运行结果

image-20220910092942934

以上结构是为了降低明星和粉丝、明星和媒体公司的耦合度,通过媒体公司产生联系,这三者本身之间并没有什么关系。

感谢黑马程序员课程