Sir*_*b33 7 iphone delegates objective-c
任何人都可以使用类比来解释他们的一些现实生活过程 - 比如运行一个棒球队,一个咖啡店,或一个Auto-Mechanic's Shop - 什么都会让人感觉到什么?就像我们甚至不能谈论CODE,SYNTAX或编程一样 - 我已经看过很多帖子而且没有一个真的为我做过 - 我们可以先谈谈概念吗?
就像我甚至不明白为什么我们拥有它们,它们如何有利,等等.
向我展示使用和不使用委托的流程运行的真实世界类比,因此我可以看到是什么让它们如此有用和出色.
然后我们就可以编码了.
(仅供参考,我特别感兴趣的是Objective-C/iPhone App开发实施 - 但我真的认为首先从概念上理解这一点更为重要.)
提前致谢!
并非所有编码抽象都具有现实生活中的等价物.例如,你很难找到分页内存的真实比喻.因此,我只是给你一个真实案例,告诉你为什么需要它们,而不是做一个真实的比喻.
首先,要委托的动词的实际定义(来自牛津词典):
委托(一项任务或责任)给另一个人,通常是一个比自己高一级的人:他委派日常任务 授予他的权力决不能被误用.
代表是被委派责任的对象,因为从设计的角度来看,单个类完成所有工作是没有意义的.
假设您有一个UI表类.您希望使其可重复使用以显示多种数据:这意味着,大多数情况下,您无法将其与模型本身联系起来.例如,如果您专门创建了UI表格以显示相册对象(带有名称,艺术家等),那么您将无法重复使用它来显示文件对象(具有所有者,文档类型)等等):你必须编辑课程以使其适合.这会复制很多代码,所以你应该找到另一种机制.这导致了一个问题:如果不允许绑定到数据类,它如何显示任何类型的数据?
解决方案是分担获取数据和显示数据的责任.由于您的表需要数据来显示它,但由于它对您的模型一无所知而无法自己发现它,因此它应该将此责任委托给另一个类,为此专门精心设计,并让它以一般形式提供信息.该表将知道如何使用.
这意味着您将拥有另一个类,它将响应表对象将使用的一定数量的方法,就好像它是其核心行为的一部分(例如,委托上获取列名称的方法,另一个得到一个特定的行等).举一个具体的例子,您可以查找NSTableViewDelegate协议引用:这些方法NSTableView可以调用其委托来获取有关各种事物或自定义行为的信息.(tableView:基本上每个方法的参数都标识了调用方法的表视图.它经常被忽略,因为存在许多表视图委托类来支持单个表视图.)
代表是简单"知道更好"的对象.您的UI表格不知道如何获得它所需的内容,但它有一个"知道更好"的委托,因此它可以从中请求数据.
您还可以使用此模式来处理事件:例如,当单击视图时,它不知道该做什么,但可能它有一个知道该做什么的委托.
换句话说,委托是扩展类行为而不修改它或继承它的几种方法之一.
他们真的是什么?
专家
顾客:嗨 - 你修好了我的车吗?
员工:我估计我们有机会在一小时内看一下.我准备好的时候会给你打电话.
顾客:我已经等了30分钟,我真的很匆忙!
员工:我们在一年中的这个时候非常忙碌.
顾客:你好像不忙; 你一直在前台!
员工:我不是机械师.我是经理.你还想要我修理刹车吗?
经理擅长他的所作所为; 他详细说明了客户的问题,订单闪烁流畅,制定时间表,以及工资单.虽然他喜欢汽车并对他们了解很多,但他并不是修理汽车的专家.经理能够在车间做很多事情,但是具有修理客户刹车所需专业知识的机制.
使用委托最常见的原因之一是避免子类化(这就像将经理送到学校成为一个机制 - 这个类比看起来很像多重继承).当子类化可用于专门化时,通常可以使用委托.代表团是一个更宽松的债券,其中(在一个好的设计中)一个对象履行了所有或大部分职责,但其职责的频繁专门部分留给了其他实施(代表).
| 归档时间: |
|
| 查看次数: |
415 次 |
| 最近记录: |