——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-
关联关系
在实例化A类的时候,需要B类作为构造方法的参数,这说明A类需要持有一个B类的引用。
这种持有引用,就是简单的关联关系。在代码中表现为:在A类中有一个成员变量,变量的类型是B类,A类中持有了B类的引用,就说明A类和B类发生了关联关系。
先定义两个类:
Dog类的声明
#import <Foundation/Foundation.h>
@interface Dog : NSObject
@property NSString *name;
@end
Dog类的实现
#import "Dog.h"
@implementation Dog
@end
Person类的声明:
#import <Foundation/Foundation.h>
#import "Dog.h"
@interface Person : NSObject
{
@public
NSString *name;
Dog *dog;
}
-(void)print;
@end
Person类的实现
#import "Person.h"
@implementation Person
-(void)print{
NSLog(@"%@有一只狗:名字是%@",name,dog.name);
}
@end
在main函数中:
#import <Foundation/Foundation.h>
#import "Person.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
Person *p = [[Person alloc] init];
p->name = @"小明";
Dog *d = [[Dog alloc] init];
d.name = @"大黄";
p->dog = d;
[p print];
}
return 0;
}
这里人的类中有一个狗类型的成员变量,他们就发生了关联关系
依赖关系
A类的某个方法使用B类,可能是方法的参数是B类,也可能是在方法中获得了一个B类实例。但无论是哪种情况,B类在A类中都是以局部变量的形式存在的。
因此,A类中有B类型的局部变量,就说A类依赖于B类。
这里给Person类加一个方法:
@interface Person : NSObject
{
@public
NSString *name;
Dog *dog;
}
-(void)print;
-(void)have_a_dog:(Dog*)d; //加一个方法
@end
该方法的实现:
@implementation Person
-(void)print{
NSLog(@"%@有一只狗:名字是%@",name,dog.name);
}
-(void)have_a_dog:(Dog *)d{
NSLog(@"%@有一只狗:名字叫做%@",name,d.name);
}
@end
在main函数中:
#import <Foundation/Foundation.h>
#import "Person.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
Person *p = [[Person alloc] init];
p->name = @"小明";
Dog *d = [[Dog alloc] init];
d.name = @"大黄";
//p->dog = d;
//[p print];
[p have_a_dog:d];
}
return 0;
}
可以看到,Dog类的一个实例变量作为的Person类对象方法的参数,所以他们是依赖关系
综上,有一个简单的判断原则:某个类以成员变量的形式出现在另一个类中,二者是关联关系;某个类以局部变量的形式出现在另一个类中,二者是依赖关系。