Files
FrameTour-BE/src/main/java/com/ycwl/basic/pay/PayFactory.java
2025-06-02 09:46:01 +08:00

60 lines
1.9 KiB
Java

package com.ycwl.basic.pay;
import com.ycwl.basic.pay.adapter.CongMingPayAdapter;
import com.ycwl.basic.pay.adapter.IPayAdapter;
import com.ycwl.basic.pay.adapter.WxMpPayAdapter;
import com.ycwl.basic.pay.enums.PayAdapterType;
import com.ycwl.basic.pay.exceptions.PayUndefinedException;
import com.ycwl.basic.pay.exceptions.PayUnsupportedException;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
public class PayFactory {
public static IPayAdapter getAdapter(String typeName) {
PayAdapterType adapterEnum;
try {
adapterEnum = PayAdapterType.valueOf(typeName);
} catch (IllegalArgumentException e) {
throw new PayUnsupportedException("不支持的Adapter类型");
}
return getAdapter(adapterEnum);
}
public static IPayAdapter getAdapter(PayAdapterType type) {
return switch (type) {
case WX_MP_PAY -> new WxMpPayAdapter();
case CONG_MING_PAY -> new CongMingPayAdapter();
default -> throw new PayUnsupportedException("不支持的Adapter类型");
};
}
protected static Map<String, IPayAdapter> namedAdapter = new HashMap<>();
protected static IPayAdapter defaultAdapter = null;
public static void register(String name, IPayAdapter adapter) {
namedAdapter.put(name, adapter);
}
public static IPayAdapter use(String name) {
IPayAdapter adapter = namedAdapter.get(name);
if (adapter == null) {
throw new PayUndefinedException("未定义的支付方式:"+name);
}
return adapter;
}
public static IPayAdapter use() {
if (defaultAdapter == null) {
throw new PayUndefinedException("未定义默认的支付方式");
}
return defaultAdapter;
}
public static void setDefault(String defaultName) {
PayFactory.defaultAdapter = use(defaultName);
}
}