目录
- 定义
- 结构
- 应用场景
- 实现示例
定义
定义一个创建对象的类,由该类来封装实例化对象的行为。客户端只需要知道产品类型,不需要关系具体的创建细节。
结构

应用场景
适用于对象创建逻辑相对简单,产品类型有限且变化不频繁的场景,主要价值在于封装变化(创建逻辑)和解耦客户端与具体产品。
实现示例
通过简单工厂模式,整合多种支付方式,使系统能够灵活支持不同的支付渠道。
定义抽象产品
/*** 抽象产品,支付接口*/
public interface PaymentGateway {void processPayment(String orderId, BigDecimal amount);String getGatewayName();}
具体产品1:支付宝支付
/*** 支付宝支付*/
public class AlipayPayment implements PaymentGateway {@Overridepublic String getGatewayName() {return "支付宝支付";}@Overridepublic void processPayment(String orderId, BigDecimal amount) {System.out.println("[支付宝支付],处理订单号:" + orderId);System.out.println("支付金额:" + amount);System.out.println("调用支付宝API,订单支付成功!");}
}
具体产品2:银联支付
/*** 银联支付*/
public class UnionPayPayment implements PaymentGateway{@Overridepublic String getGatewayName() {return "银联支付";}@Overridepublic void processPayment(String orderId, BigDecimal amount) {System.out.println("[银联支付],处理订单号:" + orderId);System.out.println("支付金额:" + amount);System.out.println("调用银联API,订单支付成功!");}
}
具体产品3:微信支付
/*** 微信支付*/
public class WechatPayment implements PaymentGateway{@Overridepublic String getGatewayName() {return "微信支付";}@Overridepublic 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"));}}