适配器模式的主要作用是将一个类的接口转换成用户所期待的。一个适配器通常允许因为接口不兼容而不能一起工作的类能够在一起工作,所以适配器模式的使用场景一般都是做各种标准化平台的时候使用,目的是将一组同类型接口经过简单的封装转换改装成一个统一标准的接口。
/**
* @desc 外部系统获取发票入口
* @date 2020年9月7日
* @author liujl
*/
public interface PlatformInvoice {
/**
* @param taxNo 税号
* @return
*/
String getInvoiceInfo(String taxNo);
}
/**
* @desc 平台查询发票的实现类
* @date 2020年9月7日
* @author liujl
*/
public class PlatformInvoiceInfo implements PlatformInvoice {
@Override
public String getInvoiceInfo(String taxNo) {
String invoiceInfo = "{\"FPDM\": \"1100181130\",\"FPHM\": \"16622939\"}";
return invoiceInfo;
}
}
/**
* @desc 模拟外部系统发票接口
* @date 2020年9月7日
* @author liujl
*/
public interface OutOSSystemInvoice {
String queryInvoiceByTaxNo(String taxNo);
}
/**
* @desc 模拟外部系统实现
* @date 2020年9月7日
* @author liujl
*/
public class OutOSSystemInvoiceInfo implements OutOSSystemInvoice {
@Override
public String queryInvoiceByTaxNo(String taxNo) {
String invoiceInfo = "<InvoiceInfo><InvoiceCode>111</InvoiceCode><InvoiceNo>112</InvoiceNo></InvoiceInfo>";
return invoiceInfo;
}
}
/**
* @desc 发票适配器
* @date 2020年9月7日
* @author liujl
*/
public class OutOSSystemInvoiceAdapter extends OutOSSystemInvoiceInfo implements PlatformInvoice{
@Override
public String getInvoiceInfo(String taxNo) {
String xmlInvoiceInfo = super.queryInvoiceByTaxNo(taxNo);
String jsonInvoice = convertToJSON(xmlInvoiceInfo);
return jsonInvoice;
}
/**
* @param xmlInvoiceInfo
* @return
*/
private String convertToJSON(String xmlInvoiceInfo) {
// 将xml格式的发票信息转换成json格式,并将标识符进行统一转换
return null;
}
}
/**
* @desc 模拟客户端
* @date 2020年9月7日
* @author liujl
*/
public class Main {
/**
* @param args
*/
public static void main(String[] args) {
// 客户想获取发票的时候只需要调用同一个接口 getInvoiceInfo就可以获取到统一格式的发票
String taxNo = "AD98F0D0D88213";
// 从平台获取发票
PlatformInvoice o1 = new PlatformInvoiceInfo();
String invoices = o1.getInvoiceInfo(taxNo);
// 从外部系统获取发票
PlatformInvoice o2 = new OutOSSystemInvoiceAdapter();
String outOsInvoices = o2.getInvoiceInfo(taxNo);
}
}