代理理解(三)主人与仆人买饭为例
2013-01-04 17:51
99 查看
1 Master.h:
@interface Master :
NSObject
<SlaveDelegate>
// 口头承诺
@end
2.Master.m:
@implementation Master
- (void) wantToEat {
NSLog(@"我要吃饭");
Slave *s = [[Slave
alloc] init];
[s setDelegate:self];//设置代理:设置s代理self做一些事情其实类似于
s.delegate=self;
[s buyFood];
NSLog(@"仆人你去帮我买饭要吃饭");
}
- (void) didBuyFood {
NSLog(@"饭已经来了");
}
- (float) payMoney {
return 100;
}
- (void) didBuyFoodError:(NSString *)error {
}
@end
3.Slave.h
@protocol SlaveDelegate;
@interface Slave :
NSObject {
id <SlaveDelegate> delegate;
}
@property (nonatomic,
assign) id <SlaveDelegate> delegate;
- (void) buyFood;
@end
// 仆人定义的规则
协议
@protocol SlaveDelegate <NSObject>
@required
// 必须实现
然后>=100
- (float) payMoney;
@optional
- (void) didBuyFood;
- (void) didBuyFoodError:(NSString *)error;
@end
4.Slave.m
@implementation Slave
@synthesize delegate;
- (void) buyFood {
NSLog(@"仆人去买饭,可是主人你要付钱,因此这里也要用delegate,即告诉主人付钱");
float m = [delegate
payMoney];
if (m < 100) {
[delegate
didBuyFoodError:@"钱不够"];
return;
}
// ....
[delegate
didBuyFood];
NSLog(@"买完了,告诉主人一声");
}
@end;
主人想吃饭(wanttoeat()),就叫仆人去买饭(buyfood()),仆人去买饭(buyfood()具体实现细节),就得主人付钱(paymoney()),仆人买完了要告诉主人(didBuyFood()),主人才可以吃饭(didbuyfood具体实现细节)。
这样通过代理就完成了两个对象之间的通信。记住在这里:明确谁指定规则,谁遵守规则(本题的规则就是:主人你叫我买饭可以,但是钱必须要你来付(paymoney))。当然这里也分两种,一种是require(必须实现的),一种是optional(可选择的)
@interface Master :
NSObject
<SlaveDelegate>
// 口头承诺
@end
2.Master.m:
@implementation Master
- (void) wantToEat {
NSLog(@"我要吃饭");
Slave *s = [[Slave
alloc] init];
[s setDelegate:self];//设置代理:设置s代理self做一些事情其实类似于
s.delegate=self;
[s buyFood];
NSLog(@"仆人你去帮我买饭要吃饭");
}
- (void) didBuyFood {
NSLog(@"饭已经来了");
}
- (float) payMoney {
return 100;
}
- (void) didBuyFoodError:(NSString *)error {
}
@end
3.Slave.h
@protocol SlaveDelegate;
@interface Slave :
NSObject {
id <SlaveDelegate> delegate;
}
@property (nonatomic,
assign) id <SlaveDelegate> delegate;
- (void) buyFood;
@end
// 仆人定义的规则
协议
@protocol SlaveDelegate <NSObject>
@required
// 必须实现
然后>=100
- (float) payMoney;
@optional
- (void) didBuyFood;
- (void) didBuyFoodError:(NSString *)error;
@end
4.Slave.m
@implementation Slave
@synthesize delegate;
- (void) buyFood {
NSLog(@"仆人去买饭,可是主人你要付钱,因此这里也要用delegate,即告诉主人付钱");
float m = [delegate
payMoney];
if (m < 100) {
[delegate
didBuyFoodError:@"钱不够"];
return;
}
// ....
[delegate
didBuyFood];
NSLog(@"买完了,告诉主人一声");
}
@end;
主人想吃饭(wanttoeat()),就叫仆人去买饭(buyfood()),仆人去买饭(buyfood()具体实现细节),就得主人付钱(paymoney()),仆人买完了要告诉主人(didBuyFood()),主人才可以吃饭(didbuyfood具体实现细节)。
这样通过代理就完成了两个对象之间的通信。记住在这里:明确谁指定规则,谁遵守规则(本题的规则就是:主人你叫我买饭可以,但是钱必须要你来付(paymoney))。当然这里也分两种,一种是require(必须实现的),一种是optional(可选择的)
相关文章推荐
- 简单理解AOP --- 基础知识之代理模式
- 正向代理与反向代理的理解
- 理解动态代理
- 深入理解JavaScript系列(31):设计模式之代理模式
- Java之深入理解JDK动态代理
- Spring框架学习1.0对动态代理的理解z,自定义BeanFactory
- 理解设计模式之代理模式
- 极速理解设计模式系列:3.代理模式(Proxy Pattern)
- 理解JAVA动态代理
- 从装饰者模式出发:我理解的动态代理
- 深入理解java动态代理机制
- 理解C#中的代理和事件(一)
- JDK 动态代理的简单理解
- 深入理解 java Proxy代理机制
- 理解Java动态代理(1)—找我还钱?我出钱要你的命
- iptables 垫脚石之 NAT DNAT SNAT 代理 深度理解
- 理解:字典转模型,代理,UItableView的数据源,自定义cell
- 对代理模式和动态代理的理解
- 反向代理的理解