iOS 通过协议提供匿名对象

应用场景:  有时对象类型 并不重要,重要的是 对象有没有实现某些方法,在此情况下级可以使用 匿名类型 来表达这一概念。

例子如下:

#import


@protocol EOCDatabaseConnection;



@interface EOCDatabaseManager : NSObject


+ (id)sharedInstance;


- (id<EOCDatabaseConnection>)connectionWithIdentifier:(NSString *)identifier;



@end



@protocol EOCDatabaseConnection <NSObject>


- (void)connect;


- (void)disconnect;


- (BOOL)isConnected;


- (NSArray *)performQuery:(NSString *)query;

@end


在本例子中 处理数据库连接所用的后端代码 可能使用了 各种第三方库 俩连接不同的数据库 可能是SQlite 可能是 MySQL 等由于这些类 多在第三方库中,没有办法令所有的类都继承自同一个基类。  实际上我们创建了 匿名对象 我们并不关心她的类型 只关心 是否遵循了相应的协议。 id<EOCDatabaseConnection> 就是 匿名对象。 在开发后续版本的时候无须 改变公共的API 。即可切换后端的实现类。


你可能感兴趣的:(iOS设计模式探讨)