main.m
// // main.m // 代理設計模式 /* 代理設計模式的3種使用場合 1,A 想讓B 幫他做些事情, 可以讓B成為A的代理先 2,A 想通知B,A發生了一些事情,可以讓B成為A的代理先 3,B 想監聽A發生了一些事情, 可以讓B成為A的代理先 代理設置模式的標准4步 1,定義一份protocol協議 2,B想做代理,必須先遵守並實現上面那份協議 3,A裡面定義一個成員 iddelegate 4,將B的實例對象,賦值給A的成員變量delegate */ // Created by beyond on 14-7-25. // Copyright (c) 2014年 com.beyond. All rights reserved. // #import #import "Baby.h" #import "nana.h" int main(int argc, const char * argv[]) { @autoreleasepool { Baby *bb = [[Baby alloc]init]; bb.age = 1; bb.Nanny = [[nana alloc]init]; // 嬰兒餓了 [bb hungry]; } return 0; }
協議
BabyNannyDelegate.h
// // BabyNannyDelegate.h // 代理設置模式 // // Created by beyond on 14-7-25. // Copyright (c) 2014年 com.beyond. All rights reserved. // #import@class Baby; @protocol BabyNannyDelegate // 嬰兒保姆協議中 規定三個方法 // 給嬰兒喂奶 - (void)feedBaby:(Baby *)baby; // 逗樂嬰兒 - (void)amuseBaby:(Baby *)baby; // 拍打嬰兒,使其入睡 - (void)patBaby:(Baby *)baby; @end
Baby.h
// // Baby.h // 代理設置模式 // // Created by beyond on 14-7-25. // Copyright (c) 2014年 com.beyond. All rights reserved. // #import#import "BabyNannyDelegate.h" @interface Baby : NSObject // 對象是strong id代表任何對象都可以作保姆,只要遵守保姆協議,並實現協議中的三個方法 @property (nonatomic,strong) id Nanny; @property (nonatomic , assign) int age; - (void)cry; // 嬰兒哭啦 - (void)sleep; // 嬰兒想睡啦 - (void)hungry; // 嬰兒想吃奶了 @end
Baby.m
// // Baby.m // 代理設置模式 // // Created by beyond on 14-7-25. // Copyright (c) 2014年 com.beyond. All rights reserved. // #import "Baby.h" @implementation Baby - (void)cry { NSLog(@"%d歲的嬰兒...哭啦",_age); // 調用代理裡面的逗樂嬰兒的方法 [_Nanny amuseBaby:self]; } - (void)sleep { NSLog(@"%d歲的嬰兒...想睡覺啦",_age); // 調用代理裡面的拍打嬰兒使其入睡的方法 [_Nanny patBaby:self]; } - (void)hungry { NSLog(@"%d歲的嬰兒...想吃奶啦",_age); // 調用代理裡面的給嬰兒喂奶的方法 [_Nanny feedBaby:self]; } @end
保姆nana.h
// // nana.h // 代理設置模式 // // Created by beyond on 14-7-25. // Copyright (c) 2014年 com.beyond. All rights reserved. // #import#import "BabyNannyDelegate.h" // 娜娜 現在想照看嬰兒,必須遵守嬰兒保姆協議,並實現裡面的方法 @interface nana : NSObject @end
保姆nana.m
// // nana.m // 代理設置模式 // // Created by beyond on 14-7-25. // Copyright (c) 2014年 com.beyond. All rights reserved. // #import "nana.h" #import "Baby.h" @implementation nana - (void)feedBaby:(Baby *)baby { NSLog(@"娜娜正在給%d歲的嬰兒喂奶",baby.age); } - (void)amuseBaby:(Baby *)baby { NSLog(@"娜娜正在哄%d歲的嬰兒開心",baby.age); } - (void)patBaby:(Baby *)baby { NSLog(@"娜娜正在輕輕拍打%d歲的嬰兒入睡",baby.age); } @end