介绍
适配器模式是就是把一种接口转换成另一种接口,统一给调用者提供简单好用的接口。
如上图所示,在工业设计上,苹果电脑为了美观取消了以太网接口,那我们的电脑如果要使用有线以太网,就需要这根线做转接,把USB转成以太网输出,这样苹果电脑就可以上有线网络了。
适配器方案在项目开发中能够大量节约开发和维护成本,Android系统框架中有实现好的适配器方案,对ListView实现的很友好,可以提高对ListView的开发和维护。
我封装了BaseTableViewAdapter和BaseCollectionViewAdapter
在Controller里实现TableView和CollectionView只需要下面这样写
|
|
运行结果如下
发现没有TableView和CollectionView的逻辑只需要写这么点代码。
下面对iOS中UITableView和UICollectionView实现适配器方案。
Swift实现
使用Swift里面实现UITableView的适配器的封装,其中数据声明使用泛型,避免底层参与上层业务逻辑。
UITableView实现
BaseTableViewAdapter
实现BaseTableViewAdapter
,基础Adapter,用于继承
|
|
下面讲解代码实现步骤
|
|
把UITableView传进来,实现UITableView的代理方法
|
|
dataSoure是数据源,调用reloadData,实现TableView代理数据刷新
|
|
实现点击,通过block接口传递出去,这样把代理方法通过block传递,此对象实现了大部分的UITableView初始化和代理的逻辑
|
|
声明泛型T,前面说了传数据,那我们的数据类型是不固定的,通过泛型我们不需要知道数据类型,因为交给上层去处理就好了。
实现Adapter
前面实现了BaseTableViewAdapter,下面我们利用继承BaseTableViewAdapter,实现业务。
实现MixTableViewAdapter,如下。
|
|
|
|
onCreate里面进行一些TableView的初始化,行高、注册cell等。
|
|
|
|
声明泛型类型为Int,处理数据源,通过泛型传递,bingData是泛型传过来的Int。
UICollectionView实现
BaseCollectionViewAdapter
实现BaseCollectionViewAdapter
,基础Adapter,用于继承
|
|
代码讲解
|
|
传递UICollectionView,实现代理方法
|
|
传递数据源,刷新CollectionView
|
|
实现点击操作,通过block回调
|
|
泛型传递
实现Adapter
新建MixCollectionViewAdapter继承BaseCollectionViewAdapter,声明泛型为Int,代码如下。
|
|
在onCreate实现CollectionView的进一步初始化
|
|
回调处理数据
|
|
OC实现
因为在OC里面id可以代表一切类型,数据传递可以使用id,运行时直接解析成我们需要的数据类型就可以了。
UITableView实现
BaseTableViewAdapter
OC实现虽有区别,但是大体上是一样的,代码如下。
|
|
初始化TableView,实现代理方法,传递点击事件。
实现Adapter
继承BaseTableViewAdapter,实现业务逻辑,代码如下。
|
|
实现进一步的初始化操作,可以在此实现cell的业务逻辑。
UICollectionView实现
OC里面UICollectionView的实现逻辑也是大同小异
BaseCollectionViewAdapter
|
|
传递CollectionView,实现代理方法,传递数据源,刷新数据,传递点击事件。
实现Adapter
继承BaseCollectionViewAdapter,继续业务逻辑,代码如下。
|
|
进一步初始化操作,实现cell的业务逻辑。
总结
iOS中各种MVX模式天天讨论,孰优孰虑?实际上平时的代码中,如果很好的使用设计模式,做代码的解耦,像适配器模式这样很好的使用,代码易读,开发维护成本降低,使用MVC开发绰绰有余了。
本文测试代码放到GitHub上了,有需要可以去查看。
关注我
欢迎关注公众号:jackyshan,技术干货首发微信,第一时间推送。