zoukankan      html  css  js  c++  java
  • 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;

    }

  • 相关阅读:
    CSP2019-S2总结
    #期望dp#洛谷 6835 [Cnoi2020]线形生物
    #树状数组,概率,离散,双指针#洛谷 6834 [Cnoi2020]梦原
    #容斥,倍数,排列组合#洛谷 2714 四元组统计
    #莫队,bitset#洛谷 3674 小清新人渣的本愿
    #贪心#洛谷 3173 [HAOI2009]巧克力
    #树链剖分,LCA#洛谷 3398 仓鼠找sugar
    #树状数组,哈希#洛谷 6687 论如何玩转 Excel 表格
    小甲鱼Python第八讲课后习题
    小甲鱼Python第七讲课后习题
  • 原文地址:https://www.cnblogs.com/DevinSMR/p/5118626.html
Copyright © 2011-2022 走看看