迪米特法则
作者:互联网
一、什么是迪卡特法则
迪米特法则(Law of Demeter)又叫作最少知识原则(Least Knowledge Principle 简写LKP),一个类对于其他类知道的越少越好,就是说一个对象应当对其他对象有尽可能少的了解,只和朋友通信,不和陌生人说话。英文简写为: LoD.
迪米特法则的意义在于降低类之间的耦合。由于每个对象尽量减少对其他对象的了解,因此,很容易使得系统的功能模块功能独立,相互之间不存在(或很少有)依赖关系。
值得一提的是,这一法则却不仅仅局限于计算机领域,在其他领域也同样适用。比如,美国人就在航天系统的设计中采用这一法则。
二、实践
如何做到一个对象应该对其他对象有最少的了解呢?如果我们把一个对象看作是一个人,那么要实现“一个人应该对其他人有最少的了解”,做到两点就足够了:1.只和直接的朋友交流;2.减少对朋友的了解。下面就详细说说如何做到这两点。 迪米特法则还有一个英文解释是:talk only to your immediate friends(只和直接的朋友交流)。什么是朋友呢?每个对象都必然会与其他的对象有耦合关系,两个对象之间的耦合就会成为朋友关系。那么什么又是直接的朋友呢?出现在成员变量、方法的输入输出参数中的类就是直接的朋友。迪米特法则要求只和直接的朋友通信。 GroupLeader:@interface GroupLeader : NSObject
//构造方法,传入全班学生数组
- (instancetype)initWithStudents:(NSArray<Student *> *)students;
//清点人数方法
- (void)count;
@end
@implementation GroupLeader
{
NSArray<Student *> *_students;
}
- (instancetype)initWithStudents:(NSArray<Student *> *)students{
self = [super init];
if (self) {
_students = students;
}
return self;
}
- (void)count{
NSLog(@"上课人数是:%d",(int)_students.count);
}
@end
老师类:
@interface Teacher : NSObject
//命令班长执行清点人数的任务
- (void)command:(GroupLeader *)groupLeader;
@end
@implementation Teacher
- (void)command:(GroupLeader *)groupLeader{
[groupLeader count];
}
@end
班长类:
@interface GroupLeader : NSObject
//清点人数
- (void)count:(NSArray<Student *> *)students;
@end
@implementation GroupLeader
- (void)count:(NSArray<Student *> *)students{
//直接打印出学生的人数
NSLog(@"上课人数是:%d",(int)students.count);
}
@end
学生类:
@interface Student : NSObject
@end
@implementation Student
@end
使用场景也是非常的简单:
int main(int argc, const char * argv[]) {
//创建学生数组
NSMutableArray *students = [[NSMutableArray alloc] init];
for (int i = 0; i < 20; i++) {
Student *student = [[Student alloc] init];
[students addObject:student];
}
//创建班长
GroupLeader *groupLeader = [[GroupLeader alloc] initWithStudents:students];
//创建老师
Teacher *teacher = [[Teacher alloc] init];
//老师命令班长执行清点人数命令
[teacher command:groupLeader];
return 0;
}
标签:count,GroupLeader,米特,end,students,void,法则 来源: https://www.cnblogs.com/lyt96/p/12570909.html