第28條:通過協議提供匿名物件
協議定義了一系列方法,遵從了此協議的物件應該實現它們,這樣,我們可以用協議把自己所寫的API之中的實現細節隱藏起來,將返回的物件設計為遵從此協議的純id型別。這樣,想隱藏的類名就不會出現在API中了。
協議可在某種程度上提供匿名型別。具體的物件型別可以淡化成遵從某協議的id型別,協議裡規定了物件所應實現的方法。
使用匿名物件來隱藏型別名稱(或類名)
如果具體型別不重要,重要的是物件能夠響應(定義在協議裡的)特定方法,那麼可以使用匿名物件來表示。
// 協議檔案
#import <Foundation/Foundation.h>
@protocol EOCDatabaseConnection <NSObject>
- (void)connect;
- (void)disConnect;
- (BOOL)isConnect;
@end
// 遵循協議的類 標頭檔案
#import <Foundation/Foundation.h>
#import "EOCDatabaseConnection.h"
@interface EOCDBConnection : NSObject<EOCDatabaseConnection>
@end
// 實現檔案
#import "EOCDBConnection.h"
@implementation EOCDBConnection
- (void)connect
{
NSLog(@"connect");
}
- (void)disConnect
{
NSLog(@"disConnect");
}
- (BOOL)isConnect
{
return YES;
}
@end
// 提供匿名函式 標頭檔案
#import <Foundation/Foundation.h>
@protocol EOCDatabaseConnection;
@interface EOCDatabaseManager : NSObject
+ (id)shareInstance;
- (id<EOCDatabaseConnection>)connectionWithIdentifier:(NSString *)identifier;
@end
// 實現檔案
#import "EOCDatabaseManager.h"
#import "EOCDBConnection.h"
@implementation EOCDatabaseManager
+ (id)shareInstance
{
static dispatch_once_t predicate;
static EOCDatabaseManager *sharedManager;
dispatch_once(&predicate, ^{
sharedManager = [[EOCDatabaseManager alloc] init];
});
return sharedManager;
}
- (id<EOCDatabaseConnection>)connectionWithIdentifier:(NSString *)identifier
{
if ([identifier isEqualToString:@"test"]) {
EOCDBConnection *connection = [[EOCDBConnection alloc] init];
return connection;
}
return nil;
}
@end
// 測試例子:
EOCDatabaseManager *manager = [EOCDatabaseManager shareInstance];
id<EOCDatabaseConnection> connect = [manager connectionWithIdentifier:@"test"];
[connect connect];
相關文章
- 第22條:理解NSCopying協議協議
- Raft協議:通過TermId大的通過Raft協議
- 第6條:消除過期物件的引用物件
- 通過故事引申網路協議TCP協議TCP
- jftp通過sftp協議上傳檔案FTP協議
- php通過ftp協議上傳檔案PHPFTP協議
- Ajax通過SOAP協議呼叫Web服務協議Web
- 通訊協議協議
- Redis 通訊協議Redis協議
- HTTP通訊協議HTTP協議
- Mysql通訊協議MySql協議
- MQ通訊協議MQ協議
- web通訊協議Web協議
- 網路通訊協議-ICMP協議詳解!協議
- 網路通訊協議-TCP協議詳解!協議TCP
- 網路通訊協議-HTTP協議詳解!協議HTTP
- 網路通訊協議-SMTP協議詳解!協議
- 通過ICMP協議反彈SHELL並執行命令協議
- 通過cifs協議,linux mount windows共享目錄協議LinuxWindows
- 網路通訊協議協議
- Dubbo-通訊協議協議
- 串列埠通訊協議串列埠協議
- 匿名物件物件
- [譯]通過HTTPS協議執行你的Flask程式HTTP協議Flask
- 通過expect實現ssh協議自動輸密碼協議密碼
- Android通過https協議與伺服器端進行通訊AndroidHTTP協議伺服器
- VoIP通話之sip協議協議
- 輕量通訊協議 --- MQTT協議MQQT
- HTTP協議的通訊框架HTTP協議框架
- WLAN常用的通訊協議協議
- 通訊協議:HTTP、TCP、UDP協議HTTPTCPUDP
- 15. SPI通訊協議協議
- IIC通訊協議筆記協議筆記
- SPI通訊協議筆記協議筆記
- 通訊協議和網路協議有什麼區別協議
- C# wm6透過udp協議和pc通訊C#UDP協議
- 【轉載】SAP 通過http協議 介面做銀企直連HTTP協議
- 通過 wireshark 抓包瞭解直播流媒體 RTMP 協議基本過程協議