zoukankan      html  css  js  c++  java
  • protocol代理设计模式

    1:前提必须掌握的知识
           
       ARC下的@property参数
    
       strong : 用于OC对象, 相当于MRC中的retain
       weak   : 用于OC对象, 相当于MRC中的assign
       assign : 用于基本数据类型, 跟MRC中的assign一样
       copy   : 一般用于NSString, 跟MRC中的copy一样 在ARC情况下解决”循环retain”的问题:@property一边用strong,一边用weak。
     
    2:protocol代理设计模式引入
     
      代理模式是在oc中经常遇到的一种设计模式,那什么叫做代理模式呢
    ?

      举个例子:有一个婴儿,他本身不会自己吃饭和洗澡等等一些事情,于是婴儿就请了一个保姆,于是婴儿和保姆之间商定了一个协议, 协议中写明了保姆需要做什么事情,   而保姆就是这个代理人, 即:婴儿和保姆之间有个协议,保姆遵守该协议,于是保姆就需要实现该协议中的条款成为代理人。
    3:代码实现:婴儿一要吃东西或者睡觉,保姆执行相应动作照顾婴儿
     
      lookBabyProtocol.h   :定义一个协议,里面声明代理类需要实现的方法列表, 比如这里一个代理类需要实现feedBaby与HongSleep方法

       

      Baby.h     :在需要代理的类中(Baby),定义一个对象类型为id且遵守代理协议的成员变量

      

       Baby.m

      

      BaoMu.h   :创建一个代理类(比如BaoMu),遵守上面的代理协议 

      

      BaoMu.m

      

      main.m       :main.m或其他使用Baby类的文件中,为Baby类的成员变量(代理类)赋值

      

    4:过程分析

        

       这个例子中baby想吃就通知代理(baby.m中定义的方法),然后代理就给baby吃。
    
        baby 一想吃,保姆就给他吃, 相当于baby一想吃,就调用保姆的方法,相当于保姆监听baby的一举一动
    
    
    
      这个例子可不可以理解成: 
    
    * 当对象baby发生了一些行为,想告知对象baomu (让对象B成为对象A的代理对象)
    
    * 对象baomu想监听对象baby的一些行为 (让对象B成为对象A的代理对象)
    
    * 当对象baby无法处理某些行为的时候,想让对象baomu帮忙处理 (让对象B成为对象A的代理对象)  
    5:protocol代理设计模式
    
        1> protocol代理设计模式概念
    
        代理模式概念:传入的对象,代替当前类完成了某个功能,称为代理模式
        利用协议实现代理模式的主要思路为: 
    
        1)定义一个协议,里面声明代理类需要实现的方法列表, 比如这里一个代理类需要实现feedBaby与HongSleep方法
    
        2)创建一个代理类(比如BaoMu),遵守上面的代理协议 
    
        3)在需要代理的类中(Baby),定义一个对象类型为id且遵守代理协议的成员变量 
    
        4)在Baby类中调用成员变量_delegate(代理)的方法,调用代理类的方法
    
        5)main.m或其他使用Baby类的文件中,为Baby类的成员变量(代理类)赋值
    
         
        2> protocol代理模式应用场合
    
        * 当对象A发生了一些行为,想告知对象B (让对象B成为对象A的代理对象)
    
        * 对象B想监听对象A的一些行为 (让对象B成为对象A的代理对象)
        
        * 当对象A无法处理某些行为的时候,想让对象B帮忙处理 (让对象B成为对象A的代理对象)
    
        1)监听器的场合
    
           * baomu想监听Baby的一些行为
    
        2)通知的场合
    
           * Baby发生了一些行为,想告知baomu
    
        3)有些事情,不想自己处理,想交给别人处理
    
           * Baby发生了一些行为, 但是自己不会处理, 可以交给baobu处理
    
    
  • 相关阅读:
    依赖注入(DI)和Ninject
    Dapper.NET——轻量ORM
    优化SQL查询:如何写出高性能SQL语句
    Razor语法
    sublime Text 3 官方版 3114 注册码
    数据库索引,存储过程,视图,事务
    Action向视图传值的6种方式
    C#知识点提要
    算法总结
    c++ 构造函数,拷贝构造函数,析构函数与赋值操作符
  • 原文地址:https://www.cnblogs.com/kongweiiwei/p/4619414.html
Copyright © 2011-2022 走看看