栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

springboot下,使用enum实现简单工厂模式

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

springboot下,使用enum实现简单工厂模式

比如我们有一个接口。

public interface EnPayService {

	public GenericResponse enpay(int tenantId, long punitId, String iden, double chargeMoney);
}

多个实现

@Service(PayType.Names.EN_PAY_BOC)
public class BocPayServiceImpl implements EnPayService {

	@Override
	public GenericResponse enpay(int tenantId, long punitId, String iden, double chargeMoney) {
		return null;
	}
}
@Service(PayType.Names.EN_PAY_CCB)
public class CcbServiceImpl implements EnPayService {


	@Override
	public GenericResponse enpay(int tenantId, long punitId, String iden, double chargeMoney) {
		return null;
	}
}
@Service(PayType.Names.EN_PAY_ICBC)
public class IcbcServiceImpl implements EnPayService {

	@Override
	public GenericResponse enpay(int tenantId, long punitId, String iden, double chargeMoney) {
		return null;
	}

}

这里我们使用枚举来管理的bean的名称

public enum PayType {

	CCB(8, Names.EN_PAY_CCB), // 建行支付
	ICBC(11, Names.EN_PAY_ICBC), // 工行支付
	BOC(15, Names.EN_PAY_BOC); // 中行支付

	public class Names {
		public static final String EN_PAY_CCB = "enpay_ccb";
		public static final String EN_PAY_ICBC = "enpay_icbc";
		public static final String EN_PAY_BOC = "enpay_boc";
	}

	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{
	@Autowired
	private Map service = new ConcurrentHashMap<>();

	public EnPayService enpay(PayType payType) {
		return service.get(payType.getName());
	}
}

使用枚举,可以更好的管理bean的名称,让我们在工厂里面可以更直观的拿到相关bean的名称

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1039856.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号