trong ứng dụng iPhone của tôi, tôi đang sử dụng lớp con của AFHTTPClient để truy cập một dịch vụ web còn lại. Tôi muốn tất cả các yêu cầu của mình được xử lý bởi một cá thể của ứng dụng khách API của tôi vì vậy tôi sử dụng một mẫu đơn.Mẫu Singleton với tham số
Tính năng này hoạt động tốt khi dịch vụ chỉ chạy trên một URL. Tôi có thể sử dụng giá trị không đổi để đặt URL.
Bây giờ, trong phiên bản cuối cùng của ứng dụng, mỗi ứng dụng sẽ thực sự nói chuyện với một dịch vụ khác sẽ được cài đặt trong mạng công ty.
Vì vậy, tôi sẽ nhận URL dịch vụ từ cấu hình từ xa. Mẫu Singleton vẫn là một lựa chọn tốt ở đây? Làm thế nào tôi có thể tham số hóa nó nếu URL thực sự có thể thay đổi trong suốt thời gian chạy của ứng dụng?
cổ vũ
#import "FooAPIClient.h"
#import "AFJSONRequestOperation.h"
static NSString * const kFooAPIBaseURLString = @"http://192.168.0.1";
@implementation FooAPIClient
+ (instancetype)sharedClient {
static FooAPIClient *_sharedClient = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
_sharedClient = [[self alloc] initWithBaseURL:[NSURL URLWithString:kFooAPIBaseURLString]];
});
return _sharedClient;
}
- (id)initWithBaseURL:(NSURL *)url {
self = [super initWithBaseURL:url];
if (!self) {
return nil;
}
[self registerHTTPOperationClass:[AFJSONRequestOperation class]];
[self setDefaultHeader:@"Accept" value:@"application/json"];
return self;
}
@end
Tôi nghĩ bạn sẽ phải viết một số mã. Nếu URL thay đổi liên tục thì đó là vấn đề đơn giản của chức năng "thay đổi URL" trên singleton của bạn. Nếu bạn có thể có nhiều URL hoạt động cùng một lúc thì bạn cần một số loại thư mục hoặc mảng các cá thể, hoặc có trường hợp "sở hữu" bởi mã sử dụng nó, so với địa chỉ thông qua một singleton. –
Chỉ có thể có một URL cùng một lúc. Vấn đề là, một khi đã khởi tạo, AFHTTPClient không thể thay đổi URL của nó. Vì vậy, giải pháp là để có toàn bộ AFHTTPClient như là một tài sản riêng của khách hàng của riêng tôi thay vì mở rộng nó. Nếu URL thay đổi, tôi chỉ có thể tạo một AFHTTPClient mới trong singleton của tôi. Nên làm vậy. – Jan