3

我想知道以下哪一项是面向服务设计的 Objective-C 中的正确用法/实现:

第一个版本特定于静态语言,使用协议(接口):

// 
// get the cloud service from our service provider
// 
id<CloudServices> myService = [ServiceProvider serviceWithProtocol:@protocol(CloudServices)];

第二个版本不使用协议,依赖于 Objective-C 实际上是动态的这一事实:

// 
// get the cloud service from our service provider
// 
CloudServices *myService = [ServiceProvider serviceWithClass:[CloudServices class]];

显然不同之处在于 CloudServices 是一个接口或协议,我们暗示可以将 ServiceProvider 配置为返回 CloudServices 的不同实现。

所以我的问题是选择哪种风格,为什么?
谢谢。

4

1 回答 1

1

这取决于您的服务如何工作。使用类,ServiceProvider 可以在需要时简单地实例化类并对对象执行初始化。使用协议,ServiceProvider 必须知道哪些类可用于服务,这可以防止传递错误类的一些错误。您还可以让一个类实现多个协议,因此可用于对 serviceWithProtocol: 的不同调用。

简短版本:使用类会更简单,使用协议会更灵活,可能更安全。

于 2011-01-22T02:26:32.667 回答