OC-类的复合

本文深入探讨了Objective-C中的类复合概念,通过实例解析如何使用类作为管理者来处理对象间的逻辑关系,具体展示了教师、学生与管理者之间的交互作用。详细介绍了对象的属性、方法以及如何在不同对象间进行属性传递,最终通过一个简单的例子说明了如何利用一个管理者类来简化复杂逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 /* 类的复合 */

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

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值