Objective-C中@protocol
和Class Clusters概念的主要 pro 和 contra 是什么?
他们都在程序架构中引入Loose Coupling。它们在概念上几乎是平等的,还是还有其他值得知道的东西?
答案 0 :(得分:6)
使用Class Clusters进行子类化。
另一方面,类集群是Foundation框架广泛使用的设计模式。类集群在公共抽象超类下组合了许多私有具体子类。以这种方式对类进行分组简化了面向对象框架的公开可见体系结构,而不会降低其功能丰富性。类集群基于“Cocoa设计模式”中讨论的抽象工厂设计模式。
@protocols
更像是Java接口。
称为协议的Objective-C扩展非常类似于Java中的接口。两者都只是发布任何类可以选择实现的接口的方法声明列表。协议中的方法由其他类的实例发送的消息调用。
简而言之,Class Clusters是子类/超类,其子类符合超类的整个标识,因此可以向用户隐藏实现。这在NSArray
的情况下很明显,其中编译器使用上下文来选择要使用的最佳数据结构类型。您不像在Java中那样调用NSTree
或NSLinkedList
。您可以看到NSNumber
是implemented here的方式,特别是它所说的部分:
// NSNumber实例方法 - 永远不会被调用...
@protocols类似于客户端/服务器关系,其中客户端类采用服务器类的协议,因此服务器可以调用客户端上的功能。 <NSAppDelegate>
和<UIAlertViewDelegate>
是使用协议的绝佳范例。