代表们——他们到底是什么?

2024-02-23

有人能用一些现实生活流程的类比来解释它们吗——比如经营一支棒球队、一家咖啡店或一家汽车修理店——任何有意义的事情? 就像我们甚至不要谈论代码、语法或编程——我看过很多这样的帖子,但没有一个真正适合我——我们可以先谈谈概念吗?

就像我什至不明白为什么我们有它们,它们有什么优势等等。

向我展示真实世界中使用和不使用委托运行的流程的类比,这样我就可以了解是什么让它们如此有用和伟大。

然后我们就可以将其编码出来。

(仅供参考,我的具体兴趣是 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(使用前将#替换为@)

代表们——他们到底是什么? 的相关文章

  • iPhone ImageView序列动画

    嘿 尝试将一个简单的 png 序列动画放入我的应用程序中 我在 IB 中放置了第一个框架 并将图形动画出口连接到它 序列中有 54 个 png 名称为 Comp 1 0000 png 到 Comp 1 00053 png 这是我的代码 vo
  • 是否有一个类可以获取应用程序中的默认图片查看器?

    我不想访问 iPhone 上的图像 我想显示我的应用程序中的图像 但就像您查看 iPhone 相册中的图片一样 使用所有捏合和缩放控件等 这可能吗 我认为可能 偶然 有像 AVMediaPlayer 类这样的类可以做到这一点 谢谢 汤姆 如
  • 如何确定 UINavigationController 中工具栏的高度?

    我有一个带有由 UINavigationController 呈现的工具栏的视图 当我处理 UIKeyboardWillShowNotification 时 我将整个屏幕向上滚动键盘的高度 问题是当显示键盘时 底部工具栏不显示 所以我只需将
  • NSSortDescriptor 和多对多关系

    我有两种反对意见 地点和历史项目 我正在尝试获取附加到任何历史记录项目的位置 因此该位置的获取谓词是 history count gt 0 效果很好 我还想使用 NSSortDescriptor 按最新历史项目的日期对位置对象进行排序 据我
  • Parse 在哪里存储用户会话

    登录代码 PFUser logInWithUsernameInBackground self userTextField text password self passwordTextField text block PFUser user
  • 如何在 iOS 5 中使用 Embed Segue?

    iOS 6 引入了 Embed Segue 允许在 Storyboard 中使用自定义容器控制器 有没有办法在 iOS 5 上复制这个 这里的挑战是子视图控制器的视图通常要添加为父视图控制器的某些容器视图的子视图 因为你不能随机进行序列UI
  • 将我的免费应用程序从 Universal 升级到仅限 iPhone

    我释放我的free app到 appStore 它的版本是 1 0 它是一个Universal app 现在我想发布 1 1 版本到 appStore 我将其升级到iPhone only appStore会拒绝我吗 我已阅读类似的问题 ht
  • Draggable UIView 在添加到 UIScrollView 后停止发布 TouchBegan

    在 Xcode 5 1 中我创建了一个简单的测试应用程序 https github com afarber ios newbie tree master ScrollContent对于 iPhone 结构是 scrollView gt co
  • UITableViewCell的detailTextLabel滚动时消失

    我正在使用一个字符串数组 我在其中设置detailTextLabel从 最初所有字幕都设置正确 但如果我滚动detailTextLabel消失 UITableViewCell tableView UITableView tableView
  • 如何在 UILabel 上创建强烈的红光效果

    我需要在 UILabel 或 CATextLayer 上实现外发光效果 如上所述 我知道要在文本上创建发光效果 我需要偏移量为 0 0 的阴影 我已经接触到quartz2D级别 以下是我正在使用的代码 backgroundDownLabel
  • Xcode UIWebView 本地 HTML

    我了解 HTML javascript CSS 但我想使用 HTML5 制作一个本机 混合 iPhone 应用程序 但不使用 PhoneGap 或 Nimblekit 之类的东西 我以前从未编写过真正的 非网络应用程序 iPhone 应用程
  • Swift 自定义 UITableViewCell 标签始终为零

    我已经被这个问题困扰好几天了 所以如果有人能提供帮助 我会很高兴 我正在尝试创建一个动态 UITableView 为此我创建了一个自定义 UITableView 子类 并且还创建了一个自定义 UITableViewCell 子类 因为我需要
  • 如何使用苹果钥匙串?

    我正在尝试使用scifihifi iphone 来自 Github http github com ldandersen scifihifi iphone tree master security存储和检索用户名和密码 但是 当我添加课程时
  • 如何使用所有类型的 UTI 初始化 UIDocumentPickerViewController

    我想打开 UIDocumentPickerViewController 并且它应该允许用户选择所有类型的文件 我尝试在 UIDocumentPickerViewController init 方法中提及所有 UTI 但仍然找不到某些文件 如
  • 为什么类方法中的“self = [[Rectangle alloc] init]”是错误的?

    在 Apple 的文档 Objective C 编程语言 中 第 48 页说道 Rectangle rectangleOfColor NSColor color self Rectangle alloc init BAD self setC
  • 如何多次从 NSHTTPCookieStorage 中清除 cookie?

    我的桌面应用程序连接到 Google App Engine 上托管的网络应用程序 一旦通过身份验证 它就会获得一个 authtoken cookie 并为所有未来的请求传递该 cookie 这一切都有效 但现在我想添加 退出 我尝试像这样实
  • 验证 iOS 应用程序时出现 com.apple.developer.linked-domains 问题

    当我在 Xcode 中使用 Organizer 验证我的项目时 出现以下错误 无效的代码签名权利 你的申请包的签名包含代码签名权利iOS 上不支持的 具体来说 值 for key com apple developer associated
  • Objective C“#if”语法

    我对 如果 或 如果 有点困惑 if当我查看一些类时我看到的语法 例如 if someConstant someNumber do something elif etc versus if someConstant someNumber d
  • 更改 UIActionSheet 标题字符串的字体类型和大小

    我有一个带有标题字符串 DO 这些任务 的 UIActionSheet 在标题字符串中 子字符串 DO 应为粗体 具有特定字体大小 子字符串 这些任务 应为常规 是否可以 我怎样才能做到这一点 我假设你有一个类实现了UIActionShee
  • iPhone应用程序中可以使用什么来代替工具提示?

    iPhone应用程序中可以使用什么来代替工具提示 触摸屏系统中工具提示的最佳替代品 工具提示通常是为具有光标的操作系统保留的 在触摸屏应用程序中 根本不需要工具提示 当您的应用程序在使用时 用户应该始终知道菜单在哪里 所有按钮的用途等等 因

随机推荐

  • 如何在单击时移除按钮周围的焦点

    单击按钮后 我的按钮周围都会突出显示 这是在 Chrome 中
  • 如何使用“apollo-server”加载 .graphql 文件?

    我目前正在使用单独的加载 GraphQL 架构 graphql文件 但它封装在字符串中 schema graphql const schema type CourseType id String name String type Query
  • 单独读取 csv 文件中的列名

    我有一个包含以下列的 csv 文件 身份证号 姓名 年龄 性别 接下来是上面各列的许多值 我试图单独读取列名并将它们放入列表中 我正在使用 Dictreader 这给出了正确的详细信息 with open details csv as cs
  • 如何使用图像和标签制作自定义 UIBarButtonItem?

    我想制作一个包含图像和文本的自定义 UIBarButtonItem 如下所示 我尝试子类化 UIBarButtonItem 并重写此方法 UIView customView if self storedView UIView temp UI
  • TreeMap 中的重复键[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我有下面的树图代码 我在其中存储重复的密钥 它似乎覆盖了现有的密钥 TreeMap
  • 使用 JavaScript 更改 SharePoint 列表的权限

    我有一个创建列表的应用程序 我希望应用程序也将列表权限设置为仅允许管理员对列表进行更改 我知道如何隐藏列表 但我知道这不会阻止聪明的用户输入列表的 URL 并进行修改 我没有看到使用 JavaScript 更改列表权限的方法 我可以使用的列
  • 如何在 Silverlight 应用程序中显示容器的 Azure blob 列表?

    如何在 Silverlight 应用程序中显示容器的 Azure blob 列表 我知道如何在常规 Net 中执行此操作 但我需要它在银光中 我可以上传 但我想要显示已上传内容的列表 对于 Silverlight 来说是这样的 CloudS
  • 如何修复 SVN 导入行结尾错误?

    我必须导入一个巨大的 SVN 存储库 并将其从一台服务器传输到另一台服务器 所以我从旧服务器导出它 svnadmin dump gt archive svn 并将其导入新的 svnadmin load lt archive svn 在导入过
  • 多态模式匹配导致类型不明确

    灵感来自无法匹配具有约束的多态元组 https stackoverflow com questions 57137421 cannot match on polymorphic tuples with constraints 并基于随后的c
  • AppFabric 1.0错误服务器集合不能为空

    当我运行简单的程序时 出现以下错误Windows Server 应用程序结构 1 0演示控制台应用程序 ErrorCode
  • Marshmallow 上本机 WebView 中的 Instagram 链接

    最近我注意到当你尝试调用时会出现一个非常奇怪的错误https www instragram com https www instagram com 当您的智能手机运行时在网络视图中安卓 6 棉花糖 问题是 屏幕始终保持空白 只有中间那个小
  • 在 Wagtail 中创建可重用字段集的方法?

    我正在评估 Wagtail 看看是否能在我的公司中找到它与 Wordpress 和 Drupal 一起的位置 到目前为止 我认为它很有趣并且非常喜欢其中的很多内容 但是有一件事我真的很喜欢 但找不到方法来实现 我的商店使用模式库 原子设计
  • 在 Virtual Box 中调试来宾操作系统的工具

    我只是交叉发布了我在 virtualbox org 上提出的相同问题 如果不违反任何规则 我很乐意了解更多相关信息 因为 stackoverflow 承诺会更加动态 你好 我做了一些搜索 但找不到任何工具可以从虚拟盒中的早期启动中调试来宾系
  • 有没有办法向 ADO.NET 实体框架中的关联添加额外的字段?

    我希望能够对多对多关系进行建模 其中包含有关该关系的额外详细信息 例如 Person int id String name Project int id String name ProjectPerson Person id Project
  • 使用 .NET 的稳定 RSS 阅读器

    我一直在寻找一个稳定的 NET RSS Atom 库 最好是开源的 比如 Adob e 创建的 AS3 Syndicate Library 我想在我的基于 NET 的网站中集成 RSS 源 另外 是否有适用于同一个 RSS 提要阅读器的 J
  • 如何在 Gradle 中查找/删除未使用的依赖项

    我想在我的项目中找到未使用的依赖项 Gradle 中有类似 Maven 的功能吗 Kotlin 用户更新 2021 年 12 月 17 日 检测 Kotlin 项目中缺失或多余的构建依赖项 版本 1 0 9 最新 我为 Kotlin 用户添
  • .NET WinForms 中与 Qt 的表单布局最接近的等效项是什么?

    与 Qt 最接近的等效项是什么QFormLayout在 NET WinForms 中 TableLayoutPanel 将由我决定
  • WooCommerce:删除产品写入面板选项卡

    我正在使用 WooCommerce 我想隐藏后端的 链接产品 选项卡 我找到了一个添加选项卡的钩子 woocommerce product write panel tabs 但我不确定是否也可以用这个钩子隐藏某些选项卡 谢谢你的帮助 所以我
  • RestSharp.NetCore 中的 ExecuteAsyncPost 示例

    我正在使用 RestSharp NetCore 包 并且需要调用 ExecuteAsyncPost 方法 我正在努力理解回调参数 var client new RestClient url request AddParameter appl
  • 代表们——他们到底是什么?

    有人能用一些现实生活流程的类比来解释它们吗 比如经营一支棒球队 一家咖啡店或一家汽车修理店 任何有意义的事情 就像我们甚至不要谈论代码 语法或编程 我看过很多这样的帖子 但没有一个真正适合我 我们可以先谈谈概念吗 就像我什至不明白为什么我们