// InvoiceSGService 作为适配器
public class InvoiceSGService : IInvoiceSGService
{
private IInvoiceService InvoiceSrv => HSFService.Proxy();
public InvoiceTaskDataInfo InitInvoiceTaskDataInfo(List invoiceAppID)
{
// 身份校验
SessionServiceUtil.CheckIdentityAuthorization(out SessionContext currentUser);
// 调用HSF服务
var result = InvoiceSrv.InitInvoiceTaskDataInfo(invoiceAppID);
// 数据脱敏处理
if (result != null)
{
bool nameTuoMin = UserDataPermission.YYTM_RealName(userid, "开票申请");
// ... 脱敏逻辑
}
return result;
}
}这里InvoiceSGService就是一个典型的适配器。它把HSF服务的接口适配成了SG服务需要的接口,同时在适配过程中还增加了:
身份校验逻辑
数据脱敏处理
权限控制
参数格式转换
桥接模式的核心思想是"将抽象与实现分离,使它们可以独立变化"。这个概念听起来简单,但在实际项目中要识别出什么时候该用桥接模式,还真不容易。
// 抽象接口
public interface IInvoiceInterface
{
EInvoiceData InitEInvoiceData(EInvoicePushTaskData taskData, InvoiceInterfaceConfig interfaceConfig);
bool PushEInvoice(EInvoiceTaskParamDetail param, ...);
void QueryEInvoice(EInvoiceTaskParamDetail param, ...);
}
// 具体实现
public class NuoNuoInvoiceInterface : IInvoiceInterface { ... }
public class HangXinInvoiceInterface : IInvoiceInterface { ... }
public class MoAoInvoiceInterface : IInvoiceInterface { ... }
public class ShuDaoInvoiceInterface : IInvoiceInterface { ... }
// 工厂类创建具体实现
public class InvoiceInterfaceFactory
{
public static IInvoiceInterface CreateInvoiceInterface(string apiSign)
{
switch (apiSign)
{
case "NuoNuo":
return new NuoNuoInvoiceInterface();
case "HangXin":
return new HangXinInvoiceInterface();
// ...
}
}
}这里就体现了桥接模式的思想:
抽象部分:IInvoiceInterface定义了开票接口的抽象
实现部分:各个具体的开票平台实现类
桥接:通过工厂模式在运行时选择具体的实现