我理解委托本质上是另一个对象可以传递消息的对象,并且它们代表其他类使用.因此,例如,a UITableViewDelegate具有可用于检测a中的特定事件的方法UITableView.这非常有用,事实上我在过去的iOS项目中使用过很多代表,所以这更像是一种好奇心:
为什么委托类中的方法不仅存在于委托委托的类中?
当然,在实际的课程中使用这些方法会更方便,例如UITableView?
也许它在架构上更方便,但从拳头看起来似乎反直觉.
作为一般规则,组合比继承更强大.继承会产生许多微妙的问题,其中最常见的是钻石问题,但还有许多其他问题.
委托只是战略模式的一个特定表述,它允许我们通过组合而不是继承来扩展对象.
作为问题的具体示例,以及在使用继承时钻石问题如何蔓延,请考虑以下因素:
FetchRequestDataProviding.FadeInTableView.现在我们遇到了问题因为我们都需要.所以我们需要多重继承.而且多重继承是潘多拉的一堆含糊之处.
但是如果我创建FetchRequestDataProviding一个表现为委托的单独对象,我就会消除所有这些.我实际上可以通过突破FadeInAnimating作为代表/策略来使事情变得更加强大(尽管UIView今天没有这种力量).
在ObjC中,"组合比继承更强大"通常在一个相当浅的继承树和许多委托中表现出来.Swift使用没有继承的协议和结构进一步推动了这一点.这些都不意味着继承是坏的; 它可以有很多价值(虽然像Go这样的语言完全避免它;虽然有趣的是仍然必须面对因嵌入而导致的钻石问题).但是当有疑问时,构图是更强大的工具.
| 归档时间: |
|
| 查看次数: |
99 次 |
| 最近记录: |