zoukankan      html  css  js  c++  java
  • 最精简的代理设计模式demo

    1,协议文件 

    @protocol NursePtotocol <NSObject>

     //保姆的协议方法

    - (void)startToAmuseBaby;

     @end

     2,管理类(使用类)

    @interface Baby : NSObject

    { //1,定义实例变量,即谁遵守协议,是对象。也就是说:谁充当保姆角色。《定义》

        id <NurseProtocol> delegate;

    }

    - (void)setDelegate:(id)newDelegate;

    - (id)delegate;

    - (void)crying;

    @end

    @implementation Baby

    //设置访问方法

    - (void)setDelegate:(id)newDelegate

    { delegate = newDelegate;//2,赋值代理。即:让谁当保姆。《赋值》}

    - (id)delegate

    { return delegate;}

    //孩子的行为方法(使用代理的方法)

    - (void)crying

    { NSLog(@"孩子哭了");

        //4,(管理类) 使用协议方法《使用》

        [self.delegate startToAmuseBaby];

    }

    @end

    3,充当代理类

    @interface Women : NSObject

    @end

    @implementation Women

    - (void)startToAmuseBaby

    {//3,代理类,《实现》<委托方法,需要设计者手写代码的地方,也是苹果暴露出的委托方法(UI中常用)>

        NSLog(@"保姆已经去看孩子了");}

    @end

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

    {

        @autoreleasepool {

            Baby *baby = [[Baby alloc] init];

            Women *women = [[Women alloc] init];

            //调用setter方法,赋值代理:让women遵从nurse协议

            [baby setDelegate:women];

            [baby crying];

                }

        return 0;

    }

  • 相关阅读:
    c++单例设计模式---17
    c++友元函數---16
    c++const关键字---15
    c++浅拷贝和深拷贝---14
    linux shell 基本语法
    Linux静态库生成
    alsa wav
    Android Butterknife使用方法总结 IOC框架
    利用cglib给javabean动态添加属性,不用在建VO
    钢铁雄心三 通过事件做修改器
  • 原文地址:https://www.cnblogs.com/iOS-mt/p/4114851.html
Copyright © 2011-2022 走看看