您的位置:首页 > 其它

代理理解(三)主人与仆人买饭为例

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(可选择的)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  主人 仆人 代理案例