适配器模式的意图是把一个接口转换成客户希望的另一个接口。在实际开发中,调用另一个服务接口或外部三方的平台这样的场景就可以运用适配器模式来开发。如下面的例子,调用第三方的接口时返回的接口参数格式与自己想要的不同,就可以在适配器实现类中对返回的接口进行处理成自己需要的。
1、首先定义适配器接口Adapter
public interface Adapter {
Result getPersonInfo(String name);
}
2、然后就是它的实现类:
public class AdapterImpl implements Adapter {
@Override
public Result getPersonInfo(String name) {
//调用第三方接口,返回的参数结构与自己想要的不同,可以使用适配器模式
//来组装结果。
//假设调用接口返回的是json字符串,如下:
//{
// "personName":"ff",
// "personSex":"男",
// "personAge":12,
// "adress":"sdfddf"
//}
//此结果与自己想要的Result的属性不同,需要重新组装
String url = "http://xxxx:8080/get?name=" + name;
String jsonResult = "{\"personName\":\"ff\",\"personSex\":\"男\",\"personAge\":12,\"adress\":\"sdfddf\"}";
Map<String, Object> map = JSON.parseObject(jsonResult, Map.class);
Result result = new Result();
result.setAge((int)map.get("personAge"));
result.setName(map.get("personName").toString());
result.setSex(map.get("personSex").toString());
return result;
}
}
其中的Result类是自己定义的结果类型:
public class Result {
private String name;
private String sex;
private Integer age;
//省略getter和setter方法
}
3、方法调用
public class Main {
public static void main(String[] args) {
Adapter adapter = new AdapterImpl();
Result result = adapter.getPersonInfo("sdf");
System.out.println(result.getName());
System.out.println(result.getAge());
System.out.println(result.getSex());
}
}
这是一个简单的例子,把第三方返回的结果处理成自己想要的结果类型,如果是用spring框架,也可以把Adapter作为一个bean,而不需要new一个实现类来调用。
网友评论