抽象类或协议,在Cocoa中哪个是推荐的做法?

4

我不确定是否应该创建一个抽象类和一系列继承这个抽象类的子类,还是定义一个协议。在Cocoa中,什么是最佳实践呢?

2个回答

5

这取决于具体情况。

Cocoa术语中,抽象类+子类模式被称为类群。其中著名的例子包括NSStringNSArray。这种方法的主要优点是,您可以在基类上实现方法,这些方法可以继承并以核心方法集进行工作;例如,NSString的子类只需要为-length-characterAtIndex:实现就可以让所有公共NSString实例方法工作(尽管效率不高)。

这种模式的缺点是实现必须从基类继承,这可能会成为单继承语言中的严重限制。

另一方面,协议可以由任何类采用,但不能提供基本实现。它很像鸭子类型的静态检查版本;通过采用协议,您声称您能够“嘎嘎地叫”,而通过要求一个协议,您可以将参数限制为具有“嘎嘎”能力的类,而无需指定特定的基类。

如果您计划为您的抽象提供标准的实现集,则可能需要一个类群。如果您想与实现您的抽象的开放对象集通信,则可能需要一个协议。


2

不用谢。顺便说一下,我与这本书没有任何关联,只是认为它很有帮助。 - GorillaPatch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接