编程比喻之protocol和delegate之间的关系

编程比喻之protocol和delegate之间的关系

开篇:

当你还在忍受传统老套的讲解,被专业术语搞的晕头转向时,编程比喻横空出世,且打个酱油再回。

卖萌结束,

主角

protocol/delegate之间的爱恨情仇。

小故事

寿寿最近心血来潮,注册了一家公司iceAna,打算搞ios开发,心想:反正现在的公司没业务,一台电脑一个人足以。就这样,代码寿寿写,设计寿寿搞,连拖地烧饭都得自己干!

重要寿寿开发的一款软件得到了上市公司的赏识,立马给了500万投资。寿寿心想,公司要做到看来靠一个人的时代结束了!TM起码先招个人打扫卫生,烧烧饭啊!于是他构思了下,觉得直接正式工太贵了,还是找个兼职的!发布了一则招聘启事,内容如下:

    1.会打扫卫生
    2.会烧饭做菜
    3.会发传真

寿寿想的很远,公司以后要做大,管理一定要做好,于是他决定给这个岗位设定为卫生员…..代号cleaner。就这样招聘发布了好几天,小黄来面试了,经过一番面试,寿寿很满意:他满足招聘启事上所有内容。寿寿告诉他:你这是兼职,但是我要你什么时候来打扫卫生,什么时候来做饭,随叫随到。平常你爱干啥干啥,我就叫你cleaner,行吧!小黄说可以。于是这个合同就这么签订了!

一天寿寿觉得公司乱的要命,也没说名字,直呼“cleaner,来打扫下卫生,扫干净就行,至于怎么扫随便你啦”。小黄接到传唤马上就来打扫卫生了。到了中午,寿寿饿了,通知cleaner:先烧饭。小黄马上烧饭后告诉寿寿搞定了,寿寿又说,烧下菜吧。于是小黄又忙开了。做完这些小黄就自由了 该干嘛干嘛去了!

而寿寿的生活还在继续。

比喻对应关系

  • 寿寿:class A
  • 小黄:class B
  • 招聘启事:protocol xxx:class{}
  • cleaner:var weak delegate:xxx?
  • 签合同: 在class B中 A.delegate = self class A 中 Self.delegate = B
  • 呼叫小黄做事: self.delegate.ToZuoFan() self.delegate.ToTuoDi()

举例代码:

class A内容 都是示意代码 不可运行:

protocol ToDoSomething:class{
    func 做饭(controller:A)
    func 拖地(controller:A)
}
class A{

    var weak delegate:ToDoSomething?//也许发布了招聘启事没人呢 就是nil了

    //以下两个函数满足地脏了 和要吃饭了 自动触发!
    func 地脏了就要清理(){
        self.delegate.拖地(self)  //self就是类A
    }

    func 要吃饭了就要做饭(){
        self.delegate.做饭(self)  //同上
    }

}

class B内容 示意代码:

//表示B遵循这个协议 必须要实现来证明他会
class B:ToDoSometing{

    //B知道A在发布招聘启事 应聘且成功了签订合同
    //先取到A对象
    A.delegate = self       //设定好B就是A的应聘者且签合同

    func 做饭(controller:A){
        //具体怎么做 怎么烧 烧怎样 B来决定
    }

    func 拖地(controller:A){
        //具体怎么打扫为什么它来定
    }
}

注:

本文纯属瞎比喻,看过请忘记 谢谢!

时间: 2024-10-18 16:45:47

编程比喻之protocol和delegate之间的关系的相关文章

函数式编程关心类型(代数结构)之间的关系

函数式编程关心数据的映射,命令式编程关心解决问题的步骤 我想稍微改一下,使其更数学化一点. 函数式编程关心类型(代数结构)之间的关系,命令式编程关心解决问题的步骤 函数式编程中的lambda可以看成是两个类型之间的关系,一个输入类型和一个输出类型.lambda演算就是给lambda表达式一个输入类型的值,则可以得到一个输出类型的值,这是一个计算,计算过程满足 -等价和 -规约. 函数式编程的思维就是如何将这个关系组合起来,用数学的构造主义将其构造出你设计的程序. 用Haskell来说,这个关系就

android 网络编程--socket tcp/ip udp http之间的关系

网络七层由下往上分别为物理层.数据链路层.网络层.传输层.会话层.表示层和应用层,一般编程人员接触最多的就是应用层和运输层,再往下的就是所谓的媒体层了,不是我们研究的对象. 下面是应用层.运输层,网络层.链路层通信协议概图.我们经常接触到的一般是: http协议:应用层协议,并且http协议是基于tcp连接的,主要解决的是如何包装协议的 tcp协议:运输层协议,通常也叫做tcp/ip协议,主要解决数据如何在网络中传输 udp协议:运输层协议,用户数据报协议,不可靠的协议,只负责把应用层的协议的数

(原创)c#学习笔记08--面向对象编程简介02--OOP技术04--对象之间的关系

8.2.4  对象之间的关系 继承是对象之间的一种简单关系,可以让派生类完整地获得基类的特性,而派生类也可以访问基类内部的一些工作代码(通过受保护的成员). 对象之间还有其他一些重要关系. 本节简要讨论下述关系: 包含关系:一个类包含另一个类.这类似于世承关系,但包含类可以控制对被包含类的成员的访问,甚至在使用被包含类的成员前进行其他处理. 集合关系:一个类用作另一个类的多个实例的容器.这类似于对象数组,但集合有其他功能,包括索引.排序和重新设置大小等. 1. 包含关系 用一个成员字段包含对象实

jQuery中的bind() live() delegate()之间区别分析

jQuery中的bind() live() delegate()之间区别分析 首先,你得要了解我们的事件冒泡(事件传播)的概念,我先看一张图 1.bind方式 $('a').bind('click',function (){ alert('click'); }) 解析:这种方式最简单,jq扫描文档找出所有的a,让将函数绑定到每个元素的click事件上 2.live方式 $('a').live('click',function (){ alert('click'); }) 解析:jq将函数绑定到$

category、protocol、delegate总结

一.category(类别) 类别是一种类扩展的机制,能为现有的类添加新方法. ①类别的基本语法 @interface部分,如: @interface NSString (NumberConvenience) - (NSNumber *) lengthAsNumber; @end 我们为NSString类添加了名为NumberConvenience的类别. 注: 类别只可以添加方法,不可以添加实例变量 类别可以添加属性,但属性必须是@dynamic类型的  @implementation部分 @

编程题:统计1~20之间不能被3整除的数的个数并输出这些数

以下程序是用break和continue语句来实现的. #include<stdio.h> void main() { int n,s; for(n=1,s=0;n<=20;n=n+1) { if(n%3==0) continue; printf("%d\t",n); s=s+1; } printf("\ntotal:%d\n",s); } 算法分析与流程图: 运行结果: 编程题:统计1~20之间不能被3整除的数的个数并输出这些数,布布扣,bubu

protocol和delegate

protocol和delegate完全不是一回事,放在一起说,只是因为我们经常在同一个头文件里看到这两个word. 协议(protocol),就是使用了这个协议后就要按照这个协议来办事,协议要求实现的方法就一定要实现. 委托(delegate),顾名思义就是委托别人办事,就是当 一件事情发生后,自己不处理,让别人来处理. 举个浅显的例子: 我上班的工作主要内容包括 (1)写代码(2)写文档(3)测试程序(4)接电话(5)会见客户 (1)(2)我自己全权负责,但是后面(3)(4)(5)我不想或者不

jQuery的.bind()、.live()和.delegate()之间区别[转]

摘要:jQuery的.bind()..live()和.delegate()之间的区别并非总是那么明显的,然而,如果我们对所有的不同之处都有清晰的理解的话,那么这将会有助于我们编写出更加简洁的代码,以及防止在交互应用中弹出错误. 基本要素 DOM树 首先,可视化一个HMTL文档的DOM树是很有帮助的.一个简单的HTML页面看起来就像是这个样子: 事件冒泡(又称事件传播) 当我们点击一个链接时,其触发了链接元素的单击事件,该事件则引发任何我们已绑定到该元素的单击事件上的函数的执行. $('a').b

Unix系统编程()文件描述符和打开文件之间的关系

目前学习到的是一个文件描述符对应着一个打开的文件,似乎是一一对应的关系.但是实际上并不是这样的.多个文件描述符指向同一个打开的文件,是可能的也是必要的.这些文件描述符可以在相同或者不同的进程中打开. 要理解具体情况,需要查看内核维护的3个数据结构. 进程级的文件描述符表 系统级的打开文件表 文件系统的i-node表 针对每个进程,内核为其维护打开文件的描述符(open file descriptor)表.该表的每一条目都记录了单个文件描述符的相关信息.包括有一下信息: 控制文件描述符操作的一组标