/* 类的复合 */
//复合:类拥有指向(引用)其他类的成员变量叫做复合
//OC中的设计模式:管理者,观察者,委托,通知,控制器等
//管理者
//举例:车,引擎,轮胎,车作为管理者
//举例:学校,校长,教师,学生
Teacher.h
#import <Foundation/Foundation.h>
@interface Teacher : NSObject{
NSString *_name;
NSInteger _age;
}
- (id)initWithName:(NSString *)name age:(NSInteger)age;
@property (retain,nonatomic) NSString *name;
@property (assign,nonatomic) NSInteger age;
@end
Teacher.m
@implementation Teacher
- (NSString *)description{
return [NSString stringWithFormat:@"<%@: %p>name = %@, age = %ld",[self class],self,_name,_age];
}
- (id)initWithName:(NSString *)name age:(NSInteger)age{
self = [super init];
if (self) {
_name = [name retain];
_age = age;
}
return self;
}
- (void)dealloc{
[_name release];
[super dealloc];
}
@end
Student.h
#import <Foundation/Foundation.h>
#import "Teacher.h"
@interface Student : NSObject{
NSString *_name;
NSInteger _age;
Teacher *_teacher;
}
@property (retain,nonatomic) NSString *name;
@property (assign,nonatomic) NSInteger age;
@property (retain,nonatomic) Teacher *teacher;
- (id)initWithName:(NSString *)name age:(NSInteger)age teacher:(Teacher *)teacher;
- (NSInteger)ageOfDifference;
@end
Student.m
#import "Student.h"
@implementation Student
- (id)initWithName:(NSString *)name age:(NSInteger)age teacher:(Teacher *)teacher{
self = [super init];
if (self) {
_name = [name retain];
_age = age;
_teacher = [teacher retain];
}
return self;
}
- (NSInteger)ageOfDifference{
return _age -_teacher.age;
}
- (NSString *)description{
return [NSString stringWithFormat:@"<%@: %p>name = %@, age = %ld, techer = %@",[self class],self,_name,_age,_teacher];
}
- (void)dealloc{
[_name release];
[_teacher release];
[super dealloc];
}
@end
Manage.h
#import <Foundation/Foundation.h>
#import "Student.h"
#import "Teacher.h"
//用一个管理者来管理逻辑
@interface Manager : NSObject{
//声明被管理对象的成员变量,方便寻找需要处理的对象
Student *_student;
Teacher *_teacher;
}
@property (retain,nonatomic) Student *student;
@property (retain,nonatomic) Teacher *teacher;
- (id)initWithStudent:(Student *)student
techer:(Teacher *)teacher;
- (NSInteger)ageDiffernce;
@end
Manage.m
@implementation Manager
- (id)initWithStudent:(Student *)student techer:(Teacher *)teacher{
self = [super init];
if (self) {
_student = [student retain];
_teacher = [teacher retain];
}
return self;
}
- (NSInteger)ageDiffernce{
return _student.age - _teacher.age;
}
- (void)dealloc{
[_student release];
[_teacher release];
[super dealloc];
}
@end
main.m
Teacher *teacher = [[Teacher alloc]initWithName:@"老师" age:20];
Student *student = [[Student alloc]initWithName:@"学生" age:10 teacher:teacher];
//初始化管理者(类的复合,用另一个类处理逻辑)
Manager *manager = [[Manager alloc]initWithStudent:student techer:teacher];
NSLog(@"%ld",[manager ageDiffernce]);
[student release];
[teacher release];