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;

    }

  • 相关阅读:
    URL中的特殊字符 + % # & = ? /
    mvc 前端显示文本中的html标签处理
    URL中#号(井号)的作用
    自定义配置节 Section
    vshost.exe.config与.exe.config ;Debug目录与Release目录;bin目录与obj目录
    在MVC过滤器中获取触发的Controller、Action、参数 等
    js设置全局变量 ajax中赋值
    批处理 安装、卸载 window service
    [摘]HttpContext, HttpRequest, HttpResponse, HttpRuntime, HttpServerUtility
    摘要:ASP.NET的路由
  • 原文地址:https://www.cnblogs.com/DevinSMR/p/5118626.html
Copyright © 2011-2022 走看看