有人能用一些现实生活流程的类比来解释它们吗——比如经营一支棒球队、一家咖啡店或一家汽车修理店——任何有意义的事情?
就像我们甚至不要谈论代码、语法或编程——我看过很多这样的帖子,但没有一个真正适合我——我们可以先谈谈概念吗?
就像我什至不明白为什么我们有它们,它们有什么优势等等。
向我展示真实世界中使用和不使用委托运行的流程的类比,这样我就可以了解是什么让它们如此有用和伟大。
然后我们就可以将其编码出来。
(仅供参考,我的具体兴趣是 Objective-C/iPhone 应用程序开发实现 - 但我真的认为首先从概念上理解这一点更为重要。)
提前致谢!
并非所有编码抽象都有现实生活中的等价物。例如,您很难找到现实生活中的分页内存的类比。因此,我不会在现实生活中进行类比,而是会给您一个现实生活中的案例来说明为什么您需要它们。
首先,动词的实际定义委托(摘自《牛津词典》):
委托(任务或责任)给
另一个人,通常是
比自己资历低的:他
代表日常任务|动力
决不能委托给他
滥用。
委托是被委派责任的对象,因为从设计角度来看,让一个类完成所有工作是没有意义的。
假设您有一个 UI 表类。您希望使其可重用以显示多种数据:这意味着,在大多数情况下,您不能将其与模型本身联系起来。例如,如果您专门制作 UI 表来显示专辑对象(具有名称、艺术家等),那么您将无法重用它来显示文件对象(具有所有者、文档类型)等):您必须编辑该类以使其适合。这会重复很多代码,所以你应该找到另一种机制。这导致了一个问题:如果不允许绑定到数据类,它如何显示任何类型的数据?
解决方案是分离获取数据和显示数据的责任。由于您的表需要数据来显示它,但无法发现它本身,因为它对您的模型一无所知,因此它应该delegate将此责任交给另一个类,该类正是为此目的而设计的,并让它以表格知道如何使用的通用形式将信息传回。
这意味着您将拥有另一个类,该类将响应表对象将使用的一定数量的方法,就好像它是其核心行为的一部分一样(例如,委托上的一个方法用于获取列的名称,另一个方法是获取特定行等)。对于一个具体的例子,你可以查找NSTableViewDelegate http://developer.apple.com/library/mac/#documentation/cocoa/reference/NSTableViewDelegate_Protocol/Reference/Reference.html协议参考:这些是方法NSTableView
可以调用其委托来获取有关各种事物或自定义行为的信息。 (这tableView:
基本上每个方法都有一个参数来标识调用该方法的表视图。它经常被忽略,因为存在许多表视图委托类来支持单个表视图。)
代表是“更了解”的对象。您的 UI 表不知道如何获取所需的数据,但它有一个“更了解”的委托,因此它可以从中请求数据。
您还可以使用此模式来处理事件:例如,当单击视图时,它不知道要做什么,但也许它有一个知道要做什么的委托。
换句话说,委托是在不修改类或子类化类的情况下扩展类行为的几种方法之一。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)