委托模式,OOP中界面设计的奇特名称?

时间:2013-01-29 02:27:23

标签: ios objective-c

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

1 个答案:

答案 0 :(得分:3)

委托与界面设计不同。

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

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

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

接口可以在很多其他方面使用,但基于它们提供的是基于合同的更灵活的编程方式"。

代表团提到更具体的内容。当您需要提供一个类,它是现有类(或一组类)的变体而无需子类化时,委派会有所帮助。使用委托(也称为委托模式),您可以创建一个包含现有类(委托)实例的新类,并通过简单地调用委托(委托)来实现其大多数方法。典型的例子是服务的缓存实现。原始服务启动并获取一些数据(假设它有一个fetch方法),这可能很昂贵。所以我们要缓存这个。委托只会存储原始服务和缓存:然后当您调用其fetch方法时,它会检查缓存,并且只有在缓存未命中时才会调用委托fetch 。只要缓存实现实现与委托相同的接口,就可以在其中使用它。

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