2

我是来自 C#/Java 背景的 iOS 新手。我正在阅读讨论委托模式及其重要性的文章。一旦我开始使用它,我注意到它实际上只是设计接口并使用定义的方法传递数据。这种说法是真的吗?对于了解 .net 或 java 的 iOS 大师,我可以说委托模式只是接口设计,并使用方法在实现该接口的类之间传递数据吗?还是目标 C 的动态特性让我忽略了其他一些强大的方面?

4

1 回答 1

3

委托不同于界面设计。

Java 和 C# 中的接口是方法声明的集合。接口是一种类(即类型),其他类可以实现它。如果一个类实现了一个接口,这意味着它实现了该接口声明的所有方法。

使用接口进行编程的价值在于,您可以创建方法来接受实现该接口的对象,而无需共享具体的类层次结构。

面向对象编程中出现的一个典型问题是如何以完全抽象的方式根据一些其他操作来定义一个操作,只依赖于对象的一些简单属性。例如,您可能希望实现一个排序算法,该算法可以在任何提供 compareTo 方法的对象上工作,该方法比较两个对象以查看它们的顺序。没有接口,您只能编写适用于所有对象类型的排序算法来自一个共同的超类。对于接口,对于每个希望能够排序的类来说,实现Sortable声明单个方法compareTo(比如说)的接口就足够了。

接口可以以许多其他方式使用,但它们提供的基础是基于“契约”的更灵活的编程风格。

委托是指更具体的东西。当您需要提供一个作为现有类(或一组类)的变体而没有子类化的类时,委托会有所帮助。使用委托(又名委托模式),您可以创建一个新类,该类包含现有类(委托)的实例,并通过简单地调用委托(它委托)来实现其大部分方法。一个典型的例子是服务的缓存实现。原始服务关闭并获取一些数据(假设它有一个fetch方法),这可能很昂贵。所以我们想缓存这个。委托将简单地存储原始服务和缓存:然后当您调用它的fetch方法时,它会检查缓存,并且只有当缓存未命中时,它才会调用委托的fetch. 只要缓存实现实现与委托相同的接口,就可以在其位置使用它。

因此,在委托提供了一种在严格的类层次结构之外的编程机制的意义上,接口的概念有一些共性,并且(很大程度上)通过使用接口使之成为可能,但是接口还有许多其他用途也是。

于 2013-01-29T03:14:09.960 回答