OC里面的依赖关系和关联关系,确实挺难搞清楚,我自己看了好多遍的视频,又看了别人的博客。个人总结了一些区分它们的方法
首先先介绍一下耦合度这个词:
耦合度:当修改一个对象的时候,对另外一个对象的影响程度。
低耦合: 当修改一个对象的对其他对象影响比较小
高耦合: 当修改一个对象的对其他对象影响比较大
面向对象设计原则:单一职责原则(就是一个对象仅干自己相关的事情==高内聚)
举个男人和女人的例子来分析依赖关系和关联关系:小三与原配的关系
依赖关系:A对象作为B对象的局部变量或是方法形参的,B依赖与A,这时候我们称A与B之间存在一种依赖关系。依赖关系的耦合度比较低
(男人需要去外面找个女人,然后再和女人做相应的事情)小三的关系
#import "Man.h" //导入man 里面已经导入过women了所以没有必要重复导入,多写一行很累------------main文件
int main(int argc, const char * argv[]) {
@autoreleasepool {
Man *man = [[Man alloc] init]; //创建一个男人
Women *women = [[Women alloc] init];//创建一个小三
[man kissWomen:women];//调用了亲女人的方法,传入一个小三。这边就是一种依赖关系
}
return 0;
}
#import <Foundation/Foundation.h>//-----------------------------Women.h文件
@interface Women : NSObject
- (void) say; //女人有一个say的方法
@end
#import "Women.h"//-----------------------Women.m文件
@implementation Women
- (void) say{
NSLog(@"女人说:哎呦,你好坏!");
}
@end
#import <Foundation/Foundation.h>//-----------------------------man.h文件
#import "Women.h"
@interface Man : NSObject
- (void) kissWomen:(Women *) women;//亲女人的方法,需要传入一个女人作为形参,这就是依赖关系。说明Man依赖Women
@end
#import "Man.h"//-----------------------------man.m文件
@implementation Man
- (void) kissWomen:(Women *) women{
NSLog(@"男人亲了女人");
[women say];//这里调用女人的say方法
}
@end
关联关系,HasA关系:当A对象为B对象的成员变量的时候,是一种拥有的关系,A拥有了B,这样 A对象与B对象之间存在一种关联关系。耦合度高于依赖关系。
(男人把女的给娶了,男人拥有了女人,然后做相应的事情)原配的关系
#import "Man.h"//------------------------man.m文件
int main(int argc, const char * argv[]) {
@autoreleasepool {
Man *man = [[Man alloc] init]; //创建一个男人
Women *women = [[Women alloc] init];//创建一个女人
[man setWomen:women];//让这个男人讨个老婆
[man kissWomen];//亲老婆
}
return 0;
#import <Foundation/Foundation.h>//-----------------------------Women.h文件
@interface Women : NSObject
- (void) say; //女人有一个say的方法
@end
#import "Women.h"//-----------------------------Women.m文件
@implementation Women
- (void) say{
NSLog(@"女人说:哎呦,你好坏!");
}
@end
#import <Foundation/Foundation.h>//-----------------------------man.h文件
#import "Women.h" //导入女人
@interface Man : NSObject
{
Women *_women; //现在让这个男人拥有一个女人
}
- (void) setWomen:(Women *)women;//想办法讨个老婆
//- (void) kissWomen:(Women *) women; 原来的依赖关系是需要传入一个女人的参数
//亲女人的方法,需要传入一个女人作为形参,这就是依赖关系。说明Man依赖Women
- (void) kissWomen;//现在有老婆了就直接亲,不需要外面找了
@end
#import "Man.h"//-----------------------------man.m文件
@implementation Man
- (void) setWomen:(Women *)women{
_women = women;
}
- (void) kissWomen{
NSLog(@"男人亲了女人");
[_women say];
}
@end