delegate代理設計模式(二十一)


 

代理模式用我們的話來說,就是我要干一件事,但是我不想干,那么我就找一個人來幫我去干這件事。但是干這件事,要根據我得要求來干,這個要求就是協議,我就是雇主,做事的那個人就是代理人。

在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;

}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM