本文仅供学习交流使用,侵权必删。
不作商业用途,转载请注明出处
WHAT 什么是适配器模式

适配器模式(Adapter Design Pattern)主要用于将不兼容的接口转换为系统兼容的接口。
简单来说就是解决接口不兼容的问题,能够有效避免过多的代码修改。
适配器主要利用继承(类适配器)和组合(对象适配器)方式,可以看做是一种补偿机制。为了弥补原来接口设计不当的问题,或者解决第三方接口接入导致不兼容问题
WHY 为什么使用适配器模式
- 统一多个接口功能的时候,使用一个统一的接口作为适配器,封装原来到接口到适配器内部。利用多态特性客户端就可以遍历调用所有的接口功能,无需再抽取接口代码组合成新的接口提高代码复用性。
- 需求变更导致原来接口需要依赖第三方接口的时候,利用适配器可以减少代码改动
HOW 适配器模式的实现(JAVA)
这里我们使用组合的方式实现适配器
场景:业务系统原来获取数据是从我们的数据中心获取的。因为业务变更的原因,数据获取需要从集团提供的接口获取数据,但集团接口跟我们原来提供给业务系统的数据接口不兼容。
- 数据接口
import java.util.List;
/**
* 数据接口类
*/
public interface IDataService {
List getData();
}
- 数据中心获取数据的接口实现类
import java.util.Arrays;
import java.util.List;
public class DataServiceImpl implements IDataService {
@Override
public List getData() {
return Arrays.asList("data1", "data2", "data3");
}
}
- 集团提供的数据接口
import java.util.Arrays;
import java.util.List;
public class GroupDataService {
public List getSalesData() {
return Arrays.asList("group_1", "group_2", "group_3");
}
}
- 适配器
import java.util.List;
/**
* 对象适配器
*/
public class GroupDataAdapter implements IDataService {
private GroupDataService groupDataService;
public GroupDataAdapter(GroupDataService libyDataService) {
this.groupDataService = libyDataService;
}
@Override
public List getData() {
return groupDataService.getSalesData();
}
}
- 业务系统调用接口的服务
/**
* 业务系统的服务
*/
public class BusinessService {
private IDataService dataService;
public BusinessService(IDataService dataService) {
this.dataService = dataService;
}
public void getData() {
dataService.getData().forEach(data -> {
System.out.println(data);
});
}
}
网友评论