@protocol vs Class Cluster
What are those major pro and contra for @protocol
and Class Clusters concepts in Objective-C ?
Both of them introduce Loose Coupling in program architecture. Are they conceptually almost equal, or is there something e开发者_Go百科lse worth to know ?
Caveat: Not a cocoa pro, but I don't believe they are equal at all.
With Class Clusters you subclass.
Class clusters are a design pattern that the Foundation framework makes extensive use of. Class clusters group a number of private concrete subclasses under a public abstract superclass. The grouping of classes in this way simplifies the publicly visible architecture of an object-oriented framework without reducing its functional richness. Class clusters are based on the Abstract Factory design pattern discussed in “Cocoa Design Patterns.”
@protocols
on the other hand, are more like Java interfaces.
The Objective-C extension called a protocol is very much like an interface in Java. Both are simply a list of method declarations publishing an interface that any class can choose to implement. The methods in the protocol are invoked by messages sent by an instance of some other class.
In short, Class Clusters are subclass/superclass where the subclass conforms to the entire identity of the superclass so that the implementation can be hidden from the user. This is apparent in the case of NSArray
where the compiler uses context to choose the best type of data structure to use. You don't call NSTree
or NSLinkedList
like you might in Java. You can see how NSNumber
is implemented here, especially the part where it says:
// NSNumber instance methods -- which will never be called...
@protocols are like client/server relationship where the client class adopts a protocol of the server class, so the server can call functionality on the client. <NSAppDelegate>
and <UIAlertViewDelegate>
are great examples of the use of protocols.
精彩评论