适配器模式(Adapter Pattern)将一个类的接口转换成客户期望的另一个接口,使得原本由于接口不兼容而不能一起工作的类可以一起工作。
// 目标接口 - 统一支付接口
public interface PaymentProcessor {
PaymentResult processPayment(double amount, String orderId);
}
// 支付结果类
public class PaymentResult {
private boolean success;
private String transactionId;
private String message;
// 构造函数、getter和setter方法
public PaymentResult(boolean success, String transactionId, String message) {
this.success = success;
this.transactionId = transactionId;
this.message = message;
}
// getter和setter方法
public boolean isSuccess() {
return success;
}
public void setSuccess(boolean success) {
this.success = success;
}
public String getTransactionId() {
return transactionId;
}
public void setTransactionId(String transactionId) {
this.transactionId = transactionId;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
// 适配者类 - 微信支付SDK
public class WechatPaySDK {
public int sendPayment(String id, double fee) {
System.out.println("使用微信支付 " + fee + " 元,订单号:" + id);
// 模拟支付逻辑,返回0表示成功
return 0;
}
public String getWechatTransactionId() {
return "WX_" + System.currentTimeMillis();
}
}
// 适配者类 - 银联支付SDK
public class UnionPaySDK {
public boolean charge(String billId, double cost) {
System.out.println("使用银联支付 " + cost + " 元,订单号:" + billId);
// 模拟支付逻辑
return true;
}
public String getUnionPayId() {
return "UNION_" + System.currentTimeMillis();
}
}
// 适配器类 - 支付宝支付适配器
public class AlipayAdapter implements PaymentProcessor {
private AlipaySDK alipay;
public AlipayAdapter() {
this.alipay = new AlipaySDK();
}
@Override
public PaymentResult processPayment(double amount, String orderId) {
boolean success = alipay.pay(orderId, amount);
String transactionId = success ? alipay.getTradeNo() : null;
String message = success ? "支付宝支付成功" : "支付宝支付失败";
return new PaymentResult(success, transactionId, message);
}
}
// 适配器类 - 微信支付适配器
public class WechatPayAdapter implements PaymentProcessor {
private WechatPaySDK wechatPay;
public WechatPayAdapter() {
this.wechatPay = new WechatPaySDK();
}
@Override
public PaymentResult processPayment(double amount, String orderId) {
int result = wechatPay.sendPayment(orderId, amount);
boolean success = (result == 0);
String transactionId = success ? wechatPay.getWechatTransactionId() : null;
String message = success ? "微信支付成功" : "微信支付失败";
return new PaymentResult(success, transactionId, message);
}
}
// 适配器类 - 银联支付适配器
public class UnionPayAdapter implements PaymentProcessor {
private UnionPaySDK unionPay;
public UnionPayAdapter() {
this.unionPay = new UnionPaySDK();
}
@Override
public PaymentResult processPayment(double amount, String orderId) {
boolean success = unionPay.charge(orderId, amount);
String transactionId = success ? unionPay.getUnionPayId() : null;
String message = success ? "银联支付成功" : "银联支付失败";
return new PaymentResult(success, transactionId, message);
}
}
// 客户端代码
public class ECommerceSystem {
private PaymentProcessor paymentProcessor;
public ECommerceSystem(PaymentProcessor paymentProcessor) {
this.paymentProcessor = paymentProcessor;
}
public void checkout(double amount, String orderId) {
System.out.println("开始处理订单支付...");
PaymentResult result = paymentProcessor.processPayment(amount, orderId);
if (result.isSuccess()) {
System.out.println("支付成功!交易号:" + result.getTransactionId());
} else {
System.out.println("支付失败:" + result.getMessage());
}
}
public static void main(String[] args) {
// 使用支付宝支付
ECommerceSystem alipaySystem = new ECommerceSystem(new AlipayAdapter());
alipaySystem.checkout(99.9, "ORDER_001");
System.out.println("-------------------");
// 使用微信支付
ECommerceSystem wechatSystem = new ECommerceSystem(new WechatPayAdapter());
wechatSystem.checkout(199.9, "ORDER_002");
System.out.println("-------------------");
// 使用银联支付
ECommerceSystem unionSystem = new ECommerceSystem(new UnionPayAdapter());
unionSystem.checkout(299.9, "ORDER_003");
}
}