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

来源:互联网 发布:营销网络 编辑:程序博客网 时间:2024/04/29 10:26
 

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


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

{

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

        

    }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 currentRunLooprunUntilDate:[datedateByAddingTimeInterval:8]];

            isTure = NO;

            printf("\n");

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

        }

    }

    return 0;

}

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

0 0
原创粉丝点击