我希望定义一个协议,并创建一种易于使用、标准的方式来获取该协议的“默认”共享实现-单例模式。Cocoa遵循以下模式:
[NSUserDefaults standardUserDefaults]
[NSNotificationCenter defaultCenter]
但无论哪种情况,它们都在对象层次结构的底部拥有@interfaces。我正在困扰如何使用@protocols完成此任务。显然,我可以创建一个具有空或简单方法实现的类 - 但实际上,我想要的是在层次结构底部的@protocol。我尝试了以下内容:
@protocol ConfigurationManager <NSObject>
//...
@interface ConfigurationManagerFactory : NSObject
+ (id<ConfigurationManager>)sharedConfiguration;
@end
// ...
id<ConfigurationManger> config = [ConfigurationManagerFactory sharedConfiguration];
[config ...];
目前我的方案是可行的,但我总是需要解释如何使用以及为什么要这样做。是否有一种方法可以符合Cocoa的语法(调用约定),同时仍然利用@protocols的价值?
另外,为什么我不想像这样使用@protocols呢?实现@interface仍然可以利用类别和替代实现,等等 - 就像实例化NSString通常会让你拥有扩展NSString的类一样。