OC设计模式--代理模式
来源:互联网 发布:常用的外文文献数据库 编辑:程序博客网 时间:2024/05/05 23:04
Objective-c 代理模式(delegate)
二、 代理模式的关键点:
三、实例分析
#import <Foundation/Foundation.h>@protocol Job <NSObject>-(void)takeEat;-(void)takeSleep;-(void)takePlay;-(void)takeShower;@end
我们再声明Nurse类 即代理的人:
#import <Foundation/Foundation.h>#import "Job.h"@interface Nurse : NSObject<Job>//实现该协议@end
实现文件:
#import "Nurse.h"@implementation Nurse-(void)takeEat{ NSLog(@"小孩饿了,喂它吃饭");}-(void)takeSleep{ NSLog(@"小孩困了,哄他睡觉");}-(void)takePlay{ NSLog(@"小孩醒来了,陪他玩");}-(void)takeShower{ NSLog(@"晚上给小孩洗澡");}-(void)dealloc{ NSLog(@"Nurse is dealloc");}@end
再声明一个morther类:
#import <Foundation/Foundation.h>#import "Job.h"@class Nurse;@interface Morther : NSObject{ NSString *name; id<Job> delegate; //此处声明一个代理人,从而mother可以让代理人完成需要代理的事情}-(id)initWithName:(NSString *)_name delagat:(id<Job>)_delagete; //传入代理人@property(nonatomic,copy)NSString *name;-(void)delagateThings;// 被代理的事情@end
//实现文件
#import "Morther.h"#import "Nurse.h"@implementation Morther-(id)initWithName:(NSString *)_name delagat:(id)_delagete{ self=[super init]; if (self) { if (name!=_name) { [name release]; name=[_name copy]; [delegate release]; delegate=[_delagete retain]; } } return self;}@synthesize name;-(void)dealloc{ [name release]; [delegate release]; NSLog(@"host is dealloc");}-(void)delagateThings{ int i; switch (i) { case 1: [delegate takeEat]; break; case 2: [delegate takePlay]; break; case 3: [delegate takeShower]; break; case 4: [delegate takeSleep]; break; default: break; } i++;}@end
看看 在 main 文件中是怎么实现的:
#import <Foundation/Foundation.h>#import "Morther.h"#import "Nurse.h"#import "Job.h"int main (int argc, const char * argv[]){ @autoreleasepool { NSString *name=[[NSString alloc] initWithFormat:@"小花"]; Nurse *fengjie=[[Nurse alloc] init];//代理人 fengjie Morther *morther=[[Morther alloc] initWithName:name delagat:fengjie];//这样就将代理人传入mother 对象中,这样morther对象便可以通过nurse来完成她自己不能坐的事情了。 [name release]; [NSTimer scheduledTimerWithTimeInterval:2 target:morther selector:@selector(delagateThings)userInfo:nil repeats:YES]; //调用机制, 2秒调用一次, 调用的对象是morther , 调用的方法是delagateThings; [[NSRunLoop currentRunLoop] run]; //让程序一直运行下去,保证上面的调用可以一直进行 [morther release]; [fengjie release]; } return 0;}
代理中,需要记住的关键是在发出代理请求的类(A)中声明代理人(B)的实例变量,这样就可以保证A 能通过调用B中B代理的方法来完成B代理的事情,即自己代理给B 的事情。
0 0
- OC设计模式--代理模式
- OC-代理设计模式
- OC---protocol代理设计模式
- OC中的代理设计模式
- OC中代理设计模式
- 设计模式-代理模式
- 设计模式-代理模式
- 设计模式-代理模式
- oc学习笔记-protocol代理模式
- OC基础—代理模式设计
- OC-中介找房-代理设计模式
- OC视频笔记-代理设计模式
- OC-中介找房-代理设计模式
- [黑马程序员][OC]代理设计模式
- OC基础—代理设计模式
- OC循环渐进:代理设计模式
- OC中的设计模式(代理设计模式)(类目)
- OC设计模式之代理(委托)设计模式
- 2013暑假项目实训工作内容总结
- JQuery下拉框应用
- 集群环境下,谁偷走quartz配置的定时任务
- #include "stdio.h"
- 在功能驱动程序中创建设备对象
- OC设计模式--代理模式
- Mybatis插入完成后返回主键
- Bash脚本15分钟进阶教程
- 各种排序算法(1)——冒泡,插入,选择,希尔,快排
- 省赛组队赛4
- IMDB Top 250合辑 TLF-MiniSD收藏版
- 【知识记录】Form表单中多组radio及checkbox的验证和ajax提交
- 中缀表达式与后缀表达式区别于联系
- (三) OPENSTACK 学习之 Oslo Config (oslo.config) 自己动手写项目