
//Target
@protocol IText <NSObject>
//Request()
- (NSString *)getText;
@end
//Adaptee
@interface StringList : NSObject
@property (nonatomic, strong) NSMutableArray<NSString *> *rows;
//SpecificRequest()
- (NSString *)getString;
- (void)add:(NSString *)value;
@end
@implementation StringList
- (instancetype)init {
self = [super init];
if (self) {
_rows = [NSMutableArray array];
}
return self;
}
- (NSString *)getString {
return [self.rows componentsJoinedByString:@"\n"];
}
- (void)add:(NSString *)value {
[self.rows addObject:value];
}
@end
//Adapter
@interface TextAdapter : StringList <IText>
@end
@implementation TextAdapter
//Request()
- (NSString *)getText {
return [self getString];
}
@end
TextAdapter *getTextAdapter(void) {
TextAdapter *adapter = [[TextAdapter alloc] init];
[adapter add:@"line 1"];
[adapter add:@"line 2"];
return adapter;
}
//Client
TextAdapter *adapter = getTextAdapter();
NSString *text = [adapter getText];
//text: line 1
// line 2
NSLog(@"text is \"%@\"", text);
| Convert the interface of a class into another interface clients expect. Adapter lets classes work together that couldn't otherwise because of incompatible interfaces. |