OC-中介找房-代理设计模式

来源:互联网 发布:淘宝联盟返利规则 编辑:程序博客网 时间:2024/04/29 08:01

定义一个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"


@interfaceChildren ()

- (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

{

    [NSTimerscheduledTimerWithTimeInterval: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);

        

    }elseif (care ==kServiceEat) {

        

        NSLog(@"%@:我需要吃饭!",self.name);

        

    }elseif (care ==kServiceMedicine) {

        

        NSLog(@"%@:我需要吃药!",self.name);

        

    }elseif (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

staticint count = 1;


- (ChildrenCare)findService:(Children *)children

{

   ChildrenCare care;

    if(count == 1){

        NSLog(@"%@哭了!",children.name);

        care = kServicePlay;

    }elseif (count ==2) {

        NSLog(@"%@饿了!",children.name);

        care = kServiceEat;

    }elseif (count ==3) {

        NSLog(@"%@不舒服!",children.name);

        care = kServiceMedicine;

    }else {

        NSLog(@"%@脏了!",children.name);

        care = kServiceWash;

    }

    count ++;

    return care;

}

@end


(5).FindService.h文件

#import<Foundation/Foundation.h>


typedefenum {

    kServicePlay =0,

    kServiceEat = 1,

    kServiceMedicine =2,

    kServiceWash =3

} ChildrenCare;


@classChildren;


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

            [[NSRunLoopcurrentRunLoop] runUntilDate:[datedateByAddingTimeInterval:8]];

            isTure =NO;

            printf("\n");

            NSLog(@"程序退出了……");

        }

    }

    return 0;

}

程序的运行结果如下图所示:


0 0