iOS適配器設(shè)計(jì)模式
其實(shí)就是對(duì)某個(gè)控件上的各個(gè)部分,用一個(gè)model來(lái)統(tǒng)一賦值舔涎,而在實(shí)際中可能遇到不同的model要賦值到這個(gè)控件上,那我們先將那些model轉(zhuǎn)為控件的model亡嫌。而那個(gè)控件的model其實(shí)就是適配器ModelAdapter。
比如某個(gè)控件是用來(lái)設(shè)置title和image的匾旭。那么這個(gè)適配器就應(yīng)該有title和image屬性圃郊。
如果我們的model1和model2都還未定義title和image,則我們可以使用協(xié)議來(lái)定義model1和model2色瘩,
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
@protocol ContentViewAdapterProtocol <NSObject> {
}
- (UIImage*)image;
- (NSString*)title;
@end
#import <Foundation/Foundation.h>
#import "ContentViewAdapterProtocol.h"
@interface ContentViewAdapter : NSObject<ContentViewAdapterProtocol> {
}
@property (nonatomic, weak, readonly) id model;
- (instancetype)initWithModel:(id)model;
@end
適配器:直接使用對(duì)象適配器
//對(duì)象適配器:對(duì)象適配器的好處是在一個(gè)類里處理不同的數(shù)據(jù)
#import "ContentViewModelAdapter.h"
#import "Model1.h"
#import "Model2.h"
@implementation ContentViewModelAdapter
- (instancetype)initWithModel:(id)model {
self = [super init];
if (self) {
_ model = model;
}
return self;
}
- (UIImage *)image {
UIImage *image = nil;
if ([self. model isMemberOfClass:[Model1 class]]) {
Model1 *model = self.model;
image = [UIImage imageNamed:model.imageName];
} else {
Model2 *model = self.model;
image = model.image;
}
return image;
}
- (NSString *)title {
NSString *title = nil;
if ([self.model isMemberOfClass:[Model1 class]]) {
Model1 *model = self.model;
title = model.title;
} else {
Model2 *model = self.model;
title = model.title;
}
return title;
}
方法二:使用類適配器
#import "ContentViewModelAdapter.h"
@interface Model1Adeapter : ContentViewModelAdapter
@end
@interface Model2Adeapter : ContentViewModelAdapter
@end