目录导航
- 适配器模式及其作用
- 现实生活举例
- 适配器模式的好处
- 适配器模式的实现
- 关系图
- 实现步骤
- 适配器模式的适用场景
- 适配器模式示例
适配器模式及其作用
适配器模式是一种结构型设计模式。所谓结构型是指在代码结构方面的设计模式。适配器模式作为中间层,可以让交互接口不兼容的两个类或模块间正常交互协作。双方只面向适配器工作,无需关心适配器的另一端是谁及其工作方式。
现实生活举例
苹果电脑是没有USB插孔的,如果想要连接USB插头的设备,必须使用适配器。对于苹果电脑来说,与满足自身接口协议的适配器交互,不知道也不关心在适配器的另一端的设备的交互协议是怎样的。对于USB设备来说,只与适配器的USB插口交互,同样也不关心另一端的情况。
适配器模式的好处
- 可以让接口不兼容的两个模块交互。当交互的双方接口不兼容时,如果不愿修改已有代码的功能,因为变更意味着风险,可能引入bug,另外,有可能根本没有权限修改,比如一方是第三方类库。此时使用适配器模式,可以让双方无缝对接。
- 单一职责。交互的双方专注于自己的主责,将交互设计与数据转换分离到Adapter中。
适配器模式的实现
关系图
交互主动方称为Client,交互被动方称为Service。
实现步骤
- 根据交互主动方Client所要求的交互方式和数据格式,声明Adapter接口,定义一组交互方法。
- 定义一个Adapter类,内部持有一个Service对象,所有的交互方法基于Service的功能实现。
- Client内部持有一个成员变量,类型为Adapter接口类型,可接收任何遵循Adapter接口的对象。
- 当不同的Service想提供服务时,创建新的Adapter接口实现类,基于该Service,遵循Adapter接口实现服务功能。
适配器模式的适用场景
- 想要接口不兼容的两方交互,而不用修改两方的代码。可以使用适配器作为中间者,建立沟通的桥梁
- 设计一个工具类或功能模块,根本无法预知交互方的交互方式及数据格式,但自身的工作流程及依赖功能已知,此时可将依赖的功能抽象成适配器接口,完成自己的实现。想要与之沟通的类或模块,创建遵循该适配器接口的适配器,提供相应功能。
适配器模式示例
Android中,RecyclerView便使用了适配器模式。RecyclerView作为UI组件,只负责展示数据,至于数据的来源,获取方式(如数据库、网络、内存),完全不关心,也无法预知。所以定义了获取数据的Adapter接口,想要为Recycler提供数据,需定义一个类,实现Adapter接口,提供展示的数据。