OC-类的复合

来源:互联网 发布:mysql连接期限 编辑:程序博客网 时间:2024/05/02 01:47

 /*类的复合 */

        //复合:类拥有指向(引用)其他类的成员变量叫做复合

        //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];


0 0
原创粉丝点击