首页 > 代码库 > 设计模式 - 适配器
设计模式 - 适配器
设计模式 - 适配器
适配器也叫接口适配,其目的是为了减少不同类型数据之间的耦合度而进行的数据转换,有利于减少冗余代码。
源码如下:
ModelCell.h 与 ModelCell.m
//// ModelCell.h// Adapter//// Created by YouXianMing on 15/1/6.// Copyright (c) 2015年 YouXianMing. All rights reserved.//#import <UIKit/UIKit.h>@interface ModelCell : UITableViewCell@property (nonatomic, strong) UILabel *name;@property (nonatomic, strong) UILabel *age;@end
//// ModelCell.m// Adapter//// Created by YouXianMing on 15/1/6.// Copyright (c) 2015年 YouXianMing. All rights reserved.//#import "ModelCell.h"@implementation ModelCell- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) { self.name = [[UILabel alloc] initWithFrame:CGRectMake(10, 10, 200, 18)]; self.name.font = [UIFont boldSystemFontOfSize:16.f]; self.name.textColor = [UIColor redColor]; [self addSubview:self.name]; self.age = [[UILabel alloc] initWithFrame:CGRectMake(10, 18 + 10, 200, 14)]; self.age.font = [UIFont italicSystemFontOfSize:12.f]; self.age.textColor = [UIColor blackColor]; [self addSubview:self.age]; } return self;}@end
AdapterModel.h 与 AdapterModel.m
//// AdapterModel.h// Adapter//// Created by YouXianMing on 15/1/6.// Copyright (c) 2015年 YouXianMing. All rights reserved.//#import <Foundation/Foundation.h>@interface AdapterModel : NSObject@property (nonatomic, strong) NSString *name;@property (nonatomic, strong) NSString *age;/** * 根据字典来初始化 * * @param dic model字典 * * @return 实例对象 */+ (instancetype)adapterWithDictionary:(NSDictionary *)dic;/** * 根据对象来初始化 * * @param dic model字典 * * @return 实例对象 */+ (instancetype)adapterWithObject:(id)object;@end
//// AdapterModel.m// Adapter//// Created by YouXianMing on 15/1/6.// Copyright (c) 2015年 YouXianMing. All rights reserved.//#import "AdapterModel.h"@implementation AdapterModel+ (instancetype)adapterWithDictionary:(NSDictionary *)dic { AdapterModel *model = nil; if (dic != nil && [dic isKindOfClass:[NSDictionary class]]) { model = [AdapterModel new]; model.name = dic[@"name"]; model.age = dic[@"age"]; } return model;}+ (instancetype)adapterWithObject:(id)object { // 预留 return [AdapterModel new];}@end
控制器源码:
//// ViewController.m// Adapter//// Created by YouXianMing on 15/1/6.// Copyright (c) 2015年 YouXianMing. All rights reserved.//#import "ViewController.h"#import "ModelCell.h"#import "AdapterModel.h"static NSString *ModelCellFlag = @"ModelCell";@interface ViewController ()<UITableViewDataSource, UITableViewDelegate>@property (nonatomic, strong) UITableView *tableView;@property (nonatomic, strong) NSMutableArray *dataArray;@end@implementation ViewController- (void)viewDidLoad { [super viewDidLoad]; // 初始化数据源 [self createDataSource]; // 初始化tableView [self createTableView];}#pragma mark - 数据源相关- (void)createDataSource { self.dataArray = [NSMutableArray array]; [self.dataArray addObject:[AdapterModel adapterWithDictionary:@{@"name": @"FireEmblem", @"age" : @"40"}]]; [self.dataArray addObject:[AdapterModel adapterWithDictionary:@{@"name": @"YouXianMing", @"age" : @"27"}]]; [self.dataArray addObject:[AdapterModel adapterWithDictionary:@{@"name": @"QiuLiang", @"age" : @"28"}]]; [self.dataArray addObject:[AdapterModel adapterWithDictionary:@{@"name": @"PingKang", @"age" : @"25"}]];}#pragma mark - tableView相关- (void)createTableView { self.tableView = [[UITableView alloc] initWithFrame:self.view.bounds style:UITableViewStylePlain]; self.tableView.delegate = self; self.tableView.dataSource = self; [self.tableView registerClass:[ModelCell class] forCellReuseIdentifier:ModelCellFlag]; [self.view addSubview:self.tableView];}#pragma mark row数量- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return self.dataArray.count;}#pragma mark cell初始化- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { ModelCell *cell = [tableView dequeueReusableCellWithIdentifier:ModelCellFlag]; AdapterModel *model = self.dataArray[indexPath.row]; cell.name.text = model.name; cell.age.text = model.age; return cell;}#pragma mark cell高度- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { return 50;}@end
以下是核心代码处:
设计模式 - 适配器
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。