springboot下,使用enum实现简单工厂模式
使用枚举,可以更好的管理bean的名称,让我们在工厂里面可以更直观的拿到相关bean的名称。在spring中,各个bean都是以单例存在。所以我们把bean都交由spring管理。这里我们使用枚举来管理的bean的名称。然后就可以创建我们的工厂类了。......
·
比如我们有一个接口。
public interface EnPayService {
public GenericResponse enpay(int tenantId, long punitId, String iden, double chargeMoney);
PayType getPayType();
}
3个实现类
@Service
public class BocPayServiceImpl implements EnPayService {
@Override
public GenericResponse enpay(int tenantId, long punitId, String iden, double chargeMoney) {
// 中行支付业务操作
return null;
}
@Override
public PayType getPayType() {
return PayType.BOC;
}
}
@Service
public class CcbServiceImpl implements EnPayService {
@Override
public GenericResponse enpay(int tenantId, long punitId, String iden, double chargeMoney) {
// 建行支付业务操作
return null;
}
@Override
public PayType getPayType() {
return PayType.CCB;
}
}
@Service
public class IcbcServiceImpl implements EnPayService {
@Override
public GenericResponse enpay(int tenantId, long punitId, String iden, double chargeMoney) {
// 工行支付业务操作
return null;
}
@Override
public PayType getPayType() {
return PayType.ICBC;
}
}
这里我们使用枚举来管理的bean的名称,这样我们可以在需要使用的时候,直接从枚举里面获取
public enum PayType {
CCB(8, "建行支付"), // 建行支付
ICBC(11, "工行支付"), // 工行支付
BOC(15, "中行支付"); // 中行支付
private int code;
private String name;
public static PayType resolve(int code) {
for (PayType t : PayType.values()) {
if (t.getCode() == code) {
return t;
}
}
return CCB;
}
private PayType(int code, String name) {
this.code = code;
this.name = name;
}
public int getCode() {
return code;
}
public String getName() {
return name;
}
}
然后就可以创建我们的工厂类了
@Service
public class ExtPayFactory{
private final Map<String, EnPayService> enPayServiceMap = new ConcurrentHashMap<>();
public ExternalEnPayFactory(List<EnPayService> enpayServices) {
enpayServices.forEach(e -> enPayServiceMap.put(Const.getStr(e.getPayType().getCode()), e));
}
public EnPayService get(int payType) {
return enPayServiceMap.get(Const.getStr(payType));
}
}
使用枚举,可以更好的管理bean的名称,让我们在工厂里面可以更直观的拿到相关bean的名称
这样我们就可以得到具体的service
EnPayService enPayService = externalEnPayFactory.get(payType);
if (enPayService == null) {
return GenericResponseUtil.error("不支持的支付类型");
}
return enPayService.enpay(tenantId, punitId, iden, chargeMoney);

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐
所有评论(0)