定义一个Children类和一个Nurse类,并实例化一个保姆对象和孩子对象。当孩子哭的时候,告诉保姆“我需要你陪我玩”,当孩子饿的时候,要告诉保姆“我需要吃饭”,当孩子不舒服的时候,需要告诉保姆“我需要吃药”,当孩子玩脏了的时候,要告诉保姆”我需要洗澡“。保姆照顾孩子的行为,在控制台打印出来。
(1).Children.h文件
#import <Foundation/Foundation.h>
#import "FindService.h"
@interface Children : NSObject
{
@private
NSString *_name;
id <FindService> _delegate; //委托
ChildrenCare care;
}
@property (nonatomic,copy)NSString *name;
@property (nonatomic,assign)id <FindService> delegate;
- (id)initWithName:(NSString *)name withDelegate:(id <FindService>)delegate;
- (void)wantToFindService;
@end
(2).Children.m文件
#import "Children.h"
@interface Children ()
- (void)startFindService:(NSTimer *)timer;
@end
@implementation Children
@synthesize name = _name;
@synthesize delegate = _delegate;
- (id)initWithName:(NSString *)name withDelegate:(id <FindService>)delegate
{
self = [super init];
if (self) {
self.name = name;
self.delegate = delegate;
}
return self;
}
- (void)wantToFindService
{
[NSTimer scheduledTimerWithTimeInterval:2target:selfselector:@selector(startFindService:)userInfo:nilrepeats:YES];
}
- (void)startFindService:(NSTimer *)timer
{
if ([self.delegaterespondsToSelector:@selector(findService:)]){
care = [self.delegatefindService:self];
}
if (care == kServicePlay) {
NSLog(@"%@说:我需要你陪我玩!",self.name);
}else if (care ==kServiceEat) {
NSLog(@"%@说:我需要吃饭!",self.name);
}elseif (care ==kServiceMedicine) {
NSLog(@"%@说:我需要吃药!",self.name);
}else if (care ==kServiceWash) {
NSLog(@"%@说:我需要洗澡!",self.name);
[timer invalidate];
}
printf("\n");
}
@end
(3).Nurse.h文件
#import <Foundation/Foundation.h>
#import "Children.h"
#import "FindService.h"
@interface Nurse : NSObject <FindService>
@end
(4).Nurse.m文件
#import "Nurse.h"
@implementation Nurse
static int count = 1;
- (ChildrenCare)findService:(Children *)children
{
ChildrenCare care;
if(count == 1){
NSLog(@"%@哭了!",children.name);
care = kServicePlay;
}else if (count ==2) {
NSLog(@"%@饿了!",children.name);
care = kServiceEat;
}else if (count ==3) {
NSLog(@"%@不舒服!",children.name);
care = kServiceMedicine;
}else {
NSLog(@"%@脏了!",children.name);
care = kServiceWash;
}
count ++;
return care;
}
@end
(5).FindService.h文件
#import <Foundation/Foundation.h>
typedef enum {
kServicePlay = 0,
kServiceEat = 1,
kServiceMedicine = 2,
kServiceWash = 3
} ChildrenCare;
@class Children;
@protocol FindService <NSObject>
- (ChildrenCare)findService:(Children *)children;
@end
(6).main.m文件
#import <Foundation/Foundation.h>
#import "Children.h"
#import "Nurse.h"
int main(int argc, const char * argv[])
{
@autoreleasepool {
Nurse *nurse = [[Nursealloc]init];
Children *children = [[Childrenalloc]initWithName:@"Marry"withDelegate:nurse];
[children wantToFindService];
BOOL isTure = YES;
while (isTure) {
NSDate *date = [NSDatedate];
[[NSRunLoop currentRunLoop] runUntilDate:[date dateByAddingTimeInterval:8]];
isTure = NO;
printf("\n");
NSLog(@"程序退出了……");
}
}
return 0;
}
程序的运行结果如下图所示: