码迷,mamicode.com
首页 > 其他好文 > 详细

delegate代理设计模式(二十一)

时间:2016-01-10 17:08:41      阅读:210      评论:0      收藏:0      [点我收藏+]

标签:

 

代理模式用我们的话来说,就是我要干一件事,但是我不想干,那么我就找一个人来帮我去干这件事。但是干这件事,要根据我得要求来干,这个要求就是协议,我就是雇主,做事的那个人就是代理人。

在oc中,代理模式,按照顺序注意:

1、需要有代理双方。

2、雇主有需求

3、雇主写协议

4、写实例变量(这个实例变量为id类型,遵守雇主写的协议),添加getter和setter方法。

5、雇主使用代理。

6、代理人签协议

7、代理人遵循协议,

8、代理人完成协议内容。

 

 

一个例子:

BFProtocol.h(协议内容,要求别人干什么)

#import <Foundation/Foundation.h>

 

@protocol BFProtocol <NSObject>

//默认必须

//买饭

- (void)buyFood;

//买饮料

- (void)buyWater;

//挣钱

- (void)makeMoney;

 

@end

 

Girl.h(雇主)

#import <Foundation/Foundation.h>

#import "BFProtocol.h"

@interface Girl : NSObject

{

    //男朋友,遵循协议

    id<BFProtocol> _boyFriend;

}

//getter

- (id)boyFriend;

//setter

- (void)setBoyFriend:(id<BFProtocol>)boyFriend;

 

 

//要吃饭

- (void)eating;

//要喝水

- (void)drinking;

//要逛街

- (void)shopping;

 

@end

Girl.m(雇主要干的事)

#import "Girl.h"

 

@implementation Girl

//要吃饭

- (void)eating{

    //男朋友买饭

    [_boyFriend buyFood];

}

//要喝水

- (void)drinking{

    [_boyFriend buyWater];

}

//要逛街

- (void)shopping{

    [_boyFriend makeMoney];

}

 

//getter

- (id)boyFriend{

    return _boyFriend;

}

//setter

- (void)setBoyFriend:(id<BFProtocol>)boyFriend{

    _boyFriend = boyFriend;

}

@end

Boy.h(代理人)

#import <Foundation/Foundation.h>

#import "BFProtocol.h"

//遵循协议

@interface Boy : NSObject<BFProtocol>

 

@end

Boy.m(代理人实现协议内容)

#import "Boy.h"

 

@implementation Boy

//实现协议

- (void)buyFood{

    NSLog(@"吩咐就是..");

}

- (void)buyWater{

    NSLog(@"我去买水..");

}

- (void)makeMoney{

    NSLog(@"逛街...");

}

@end

 

 

main.m(雇主使用代理)

#import <Foundation/Foundation.h>

#import "Girl.h"

#import "Boy.h"

int main(int argc, const char * argv[]) {

    @autoreleasepool {

        //创建女孩

        Girl *girl = [[Girl alloc]init];

        Boy *boy = [[Boy alloc ]init];

        //找到男朋友

        [girl setBoyFriend:boy];

        //提要求

        NSLog(@"我要吃饭:");

        [girl eating];

        NSLog(@"我要喝水..");

        [girl drinking];

        NSLog(@"我要逛街..");

        [girl shopping];

    }

    return 0;

}

delegate代理设计模式(二十一)

标签:

原文地址:http://www.cnblogs.com/DevinSMR/p/5118626.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!