@protocol vs Class Cluster

时间:2011-03-15 13:29:27

标签: objective-c cocoa cocoa-touch ios

Objective-C中@protocolClass Clusters概念的主要 pro contra 是什么?

他们都在程序架构中引入Loose Coupling。它们在概念上几乎是平等的,还是还有其他值得知道的东西?

1 个答案:

答案 0 :(得分:6)

警告:不是可可亲,但我不认为他们是平等的。

使用Class Clusters进行子类化。

  

类集群是Foundation框架广泛使用的设计模式。类集群在公共抽象超类下组合了许多私有具体子类。以这种方式对类进行分组简化了面向对象框架的公开可见体系结构,而不会降低其功能丰富性。类集群基于“Cocoa设计模式”中讨论的抽象工厂设计模式。

另一方面,

@protocols更像是Java接口。

  

称为协议的Objective-C扩展非常类似于Java中的接口。两者都只是发布任何类可以选择实现的接口的方法声明列表。协议中的方法由其他类的实例发送的消息调用。

简而言之,Class Clusters是子类/超类,其子类符合超类的整个标识,因此可以向用户隐藏实现。这在NSArray的情况下很明显,其中编译器使用上下文来选择要使用的最佳数据结构类型。您不像在Java中那样调用NSTreeNSLinkedList。您可以看到NSNumberimplemented here的方式,特别是它所说的部分:

  

// NSNumber实例方法 - 永远不会被调用...

@protocols类似于客户端/服务器关系,其中客户端类采用服务器类的协议,因此服务器可以调用客户端上的功能。 <NSAppDelegate><UIAlertViewDelegate>是使用协议的绝佳范例。