迪米特法则
迪米特法则又叫最少知识原则。
只和你的直接朋友交谈,不跟、阳生人,说话(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()//和媒体公司洽谈业务
运行结果
以上结构是为了降低明星和粉丝、明星和媒体公司的耦合度,通过媒体公司产生联系,这三者本身之间并没有什么关系。
感谢黑马程序员课程