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里面定义一个成员 id <protocol> delegate
4,将B的实例对象,赋值给A的成员变量delegate
*/
// Created by beyond on 14-7-25.
// Copyright (c) 2014年 com.beyond. All rights reserved.
//
#import <Foundation/Foundation.h>
#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 <Foundation/Foundation.h> @class Baby; @protocol BabyNannyDelegate <NSObject> // 婴儿保姆协议中 规定三个方法 // 给婴儿喂奶 - (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 <Foundation/Foundation.h> #import "BabyNannyDelegate.h" @interface Baby : NSObject // 对象是strong id代表任何对象都可以作保姆,只要遵守保姆协议,并实现协议中的三个方法 @property (nonatomic,strong) id<BabyNannyDelegate> 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 <Foundation/Foundation.h> #import "BabyNannyDelegate.h" // 娜娜 现在想照看婴儿,必须遵守婴儿保姆协议,并实现里面的方法 @interface nana : NSObject<BabyNannyDelegate> @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
原文:http://blog.csdn.net/pre_eminent/article/details/38116113