Object-C代理模式
来源:互联网 发布:淘宝古琴哪家好 编辑:程序博客网 时间:2024/05/17 09:01
先上代码:
Baby.h文件
#import <Foundation/Foundation.h>
#import "BAOMU.h"
@interface Baby : NSObject
@property(nonatomic,assign)int age;
@property(nonatomic,weak)id<BAOMU> baomu;
- (void)cry;
- (void)sleep;
- (void)play;
@end
Baby.m文件
#import "Baby.h"
@implementation Baby
- (void)cry
{
NSLog(@"%d的baby哭了",self.age);
[_baomu babycry:self]; // 通知保姆,让保姆去帮助完成要做的事情
}
- (void)sleep
{
NSLog(@"%d的baby困了",self.age);
[_baomu babysleep:self]; // 通知保姆,让保姆去帮助完成要做的事情
}
- (void)play
{
NSLog(@"%d的baby要出去玩",self.age);
[_baomu babyplay:self]; // 通知保姆,让保姆去帮助完成要做的事情
}
@end
@protocol BAOMU 文件
#import <Foundation/Foundation.h>
@class Baby;
// 在这里要用前置声明的方式,防止交叉包含产生错误
@protocol BAOMU <NSObject>
- (void)babycry:(Baby*)ababy;
- (void)babysleep:(Baby*)ababy;
- (void)babyplay:(Baby*)ababy;
@end
Nurse.h文件
#import <Foundation/Foundation.h>
#import "BAOMU.h"
@interface Nurse : NSObject<BAOMU>
@end
Nurse.m文件
#import "Nurse.h"
#import "Baby.h"
@implementation Nurse
- (void)babycry:(Baby*)ababy
{
NSLog(@"护士安慰%d岁的baby",ababy.age);
}
- (void)babysleep:(Baby*)ababy
{
NSLog(@"护士哄%d岁的baby睡觉",ababy.age);
}
- (void)babyplay:(Baby*)ababy
{
NSLog(@"护士陪%d岁的baby玩",ababy.age);
}
@end
到底谁才能成为Baby的代理呢,必须要能够帮助Baby完成一些事,那么又如何保证一个代理一定就能帮助Baby完成一些事呢
这里就需要声明一个协议,协议里面声明了一些方法可以帮助Baby完成"一些事",要成为Baby的协议就必须遵循这个协议,并且实现协议里面的方法,
这样就保证了每个代理都能够帮助Baby完成一些事,因为这里只要能够帮助Baby做一些事情的对象都可以做Baby的代理,
所以将Baby的代理声明为 id 类型的.
main()函数测试:
#import <Foundation/Foundation.h>
#import "Baby.h"
#import "Nurse.h"
int main(int argc, const char * argv[])
{
@autoreleasepool {
Nurse* nurse = [[Nurse alloc] init];
Baby* baby = [[Baby alloc] init];
baby.age =2;
[baby setBaomu:nurse];
[baby cry];
[baby sleep];
[baby play];
}
return 0;
}
运行结果如下:
这里Baby没有显示的调用协议里面的方法,而代理却时时刻刻的监听到了Baby的动作,
baby 哭了, 代理自动调用 - (void)babycry:(Baby*)ababy 方法;
baby 困了, 代理自动调用 - (void)babysleep:(Baby*)ababy 方法;
baby 要出去玩 , 代理自动调用 - (void)babyplay:(Baby*)ababy 方法;
这就是代理的功能!
- Object-C代理模式
- object c 代理设计模式,有点像java的监听
- object-c代理
- 委托模式-- object-c
- Object-C 设计模式
- Object-C委托模式
- Object-c 观察者模式
- object-c 策略模式
- 【C++】Chapter4:代理模式
- Objective C--代理模式
- Objective C 代理模式
- Objective-c 代理模式
- [c++]代理对象模式
- [c++]代理对象模式
- (Object-C)协议和代理
- object-c AppDelegate代理函数生命周期详解
- Object-C中的代理协议Protocol
- Object-c单例模式
- thinkphp(2)--2015.10.15
- 测试阶段效率如何提升
- 一、Sphinx安装测试
- Linux进程实践(4) --wait避免僵尸进程
- 黑马程序员——OC学习笔记02 面向对象1 类
- Object-C代理模式
- keil工程移植到IAR历程
- 操作系统
- jquery validate验证
- tomcat目录结构及配置文件说明
- ie6/ie7/ie8不兼容html5的方法
- Linux Shell 常用命令
- 在字符串定义时,在字符串中间插入'\0'字符
- git archive用法