设计模式之简单工厂模式

发布于:2025-06-29 ⋅ 阅读:(20) ⋅ 点赞:(0)

定义

定义一个创建对象的类,由该类来封装实例化对象的行为。客户端只需要知道产品类型,不需要关系具体的创建细节。

结构

在这里插入图片描述

应用场景

适用于对象创建逻辑相对简单,产品类型有限且变化不频繁的场景,主要价值在于封装变化(创建逻辑)和解耦客户端与具体产品。

实现示例

通过简单工厂模式,整合多种支付方式,使系统能够灵活支持不同的支付渠道。

定义抽象产品

/**
 * 抽象产品,支付接口
 */
public interface PaymentGateway {

    void processPayment(String orderId, BigDecimal amount);

    String getGatewayName();

}

具体产品1:支付宝支付

/**
 * 支付宝支付
 */
public class AlipayPayment implements PaymentGateway {

    @Override
    public String getGatewayName() {
        return "支付宝支付";
    }

    @Override
    public void processPayment(String orderId, BigDecimal amount) {
        System.out.println("[支付宝支付],处理订单号:" + orderId);
        System.out.println("支付金额:" + amount);
        System.out.println("调用支付宝API,订单支付成功!");
    }
}

具体产品2:银联支付

/**
 * 银联支付
 */
public class UnionPayPayment implements PaymentGateway{

    @Override
    public String getGatewayName() {
        return "银联支付";
    }

    @Override
    public void processPayment(String orderId, BigDecimal amount) {
        System.out.println("[银联支付],处理订单号:" + orderId);
        System.out.println("支付金额:" + amount);
        System.out.println("调用银联API,订单支付成功!");
    }
}

具体产品3:微信支付

/**
 * 微信支付
 */
public class WechatPayment implements PaymentGateway{

    @Override
    public String getGatewayName() {
        return "微信支付";
    }

    @Override
    public void processPayment(String orderId, BigDecimal amount) {
        System.out.println("[微信支付],处理订单号:" + orderId);
        System.out.println("支付金额:" + amount);
        System.out.println("调用微信API,订单支付成功!");
    }
}

定义工厂类


public class PaymentFactory {

    public static PaymentGateway createPaymentGateway(String paymentMethod) {
        switch (paymentMethod.toLowerCase()) {
            case "wechat":
                return new WechatPayment();
            case "alipay":
                return new AlipayPayment();
            case "unionpay":
                return new UnionPayPayment();
            default:
                throw new IllegalArgumentException("Unsupported payment method: " + paymentMethod);
        }
    }

}

测试


public class Client {

    public static void main(String[] args) {
        PaymentGateway alipay = PaymentFactory.createPaymentGateway("alipay");
        alipay.processPayment("HJ0001", new BigDecimal("129.9"));
        PaymentGateway wechat = PaymentFactory.createPaymentGateway("wechat");
        wechat.processPayment("HJ0002", new BigDecimal("123.9"));
    }

}

网站公告

今日签到

点亮在社区的每一天
去签到