定义
定义一个创建对象的类,由该类来封装实例化对象的行为。客户端只需要知道产品类型,不需要关系具体的创建细节。
结构
应用场景
适用于对象创建逻辑相对简单,产品类型有限且变化不频繁的场景,主要价值在于封装变化(创建逻辑)和解耦客户端与具体产品。
实现示例
通过简单工厂模式,整合多种支付方式,使系统能够灵活支持不同的支付渠道。
定义抽象产品
/**
* 抽象产品,支付接口
*/
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"));
}
}