抽象类或协议,Cocoa推荐的做法是什么?

时间:2011-04-03 14:37:49

标签: cocoa protocols abstract-class

我不确定是否应该创建一个抽象类和一系列继承此抽象类的后代,或者定义一个协议。 Cocoa中最好的做法是什么?

2 个答案:

答案 0 :(得分:5)

取决于。

抽象类+后代模式在Cocoa术语中称为类集群。众所周知的例子是NSStringNSArray。这种方法的主要优点是您可以在基类上实现方法,这些方法根据一组核心方法工作并且是继承的;例如,NSString的子类只需要为所有公共-length实例方法实现-characterAtIndex:NSString(尽管它不会非常有效)。 / p>

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

另一方面,协议可以被任何类采用,但不能提供基本实现。这很像是鸭子打字的静态检查版本;通过采用您声称可以嘎嘎叫的协议,并且通过要求协议,您可以将参数限制为具有quack功能的类,而无需特定的基类。

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

答案 1 :(得分:2)

请允许我推荐一本名为 Cocoa Design Patterns 的书,这是一本非常好的书,可以查看Cocoa框架的工作原理以及使用的范例。

Cocoa Design Patterns on Amazon