好的,以下是一个 Java 版本的抽象工厂模式示例代码:
首先,我们需要定义支付网关接口 PaymentGateway:
public interface PaymentGateway {
void pay(double amount);
}
然后,我们定义多个实现该接口的类,如 AlipayGateway、WechatPayGateway、UnionPayGateway:
public class AlipayGateway implements PaymentGateway {
@Override
public void pay(double amount) {
System.out.println("使用支付宝支付 " + amount + " 元");
}
}
public class WechatPayGateway implements PaymentGateway {
@Override
public void pay(double amount) {
System.out.println("使用微信支付 " + amount + " 元");
}
}
public class UnionPayGateway implements PaymentGateway {
@Override
public void pay(double amount) {
System.out.println("使用银联支付 " + amount + " 元");
}
}
接着,我们定义一个抽象工厂类 PaymentGatewayFactory:
public interface PaymentGatewayFactory {
PaymentGateway createPaymentGateway();
}
然后,为每个具体的支付网关实现一个工厂类,如 AlipayGatewayFactory、WechatPayGatewayFactory、UnionPayGatewayFactory:
public class AlipayGatewayFactory implements PaymentGatewayFactory {
@Override
public PaymentGateway createPaymentGateway() {
return new AlipayGateway();
}
}
public class WechatPayGatewayFactory implements PaymentGatewayFactory {
@Override
public PaymentGateway createPaymentGateway() {
return new WechatPayGateway();
}
}
public class UnionPayGatewayFactory implements PaymentGatewayFactory {
@Override
public PaymentGateway createPaymentGateway() {
return new UnionPayGateway();
}
}
最后,在支付模块中,我们可以使用相应的工厂类来创建支付网关对象,如:
public class PaymentModule {
private PaymentGatewayFactory gatewayFactory;
public PaymentModule(PaymentGatewayFactory gatewayFactory) {
this.gatewayFactory = gatewayFactory;
}
public void pay(double amount) {
PaymentGateway gateway = gatewayFactory.createPaymentGateway();
gateway.pay(amount);
}
}
public class Main {
public static void main(String[] args) {
PaymentModule paymentModule = new PaymentModule(new AlipayGatewayFactory());
paymentModule.pay(100.0);
paymentModule = new PaymentModule(new WechatPayGatewayFactory());
paymentModule.pay(200.0);
paymentModule = new PaymentModule(new UnionPayGatewayFactory());
paymentModule.pay(300.0);
}
}
在这个示例中,我们通过抽象工厂模式实现了支付模块与多个支付网关的交互,而无需关心它们的具体类。