使用工厂+策略模式增加系统的可扩展性
官方定义
工厂模式
定义一个创建对象的接口,让子类决定实例化哪一个类,工厂方式使得一个类的实例延迟到子类中
策略模式
定义一组算法,使每个算法封装起来,使得他们之间可以项目交换
门面模式
要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行。门面模式提供一个高层次的接口,使得子系统更易于使用
举个栗子
工厂类
public class RefundServiceFactory {
private static Map<RefundTypeEnum, RefundBaseService> serviceMap = new HashMap<RefundTypeEnum, RefundBaseService>();
public static void register() {
serviceMap.put(RefundTypeEnum.COMMON_REFUND, (RefundBaseService) SpringUtil.getBeanByName("refundServiceCoreImpl"));
serviceMap.put(RefundTypeEnum.UNION_REFUND, (RefundBaseService) SpringUtil.getBeanByName("refundUnionPayServiceCoreImpl"));
}
public static RefundBaseService getService(String type) {
if (CheckUtils.isEmpty(serviceMap)) {
//注册工厂实例
register();
}
RefundTypeEnum refundTypeEnum = RefundTypeEnum.COMMON_REFUND;
try {
refundTypeEnum = RefundTypeEnum.valueOf(type);
} catch (Exception e) {
}
return serviceMap.get(refundTypeEnum);
}
}
调用
//策略模式+工厂模式获取具体实例
RefundBaseService refundBaseService = RefundServiceFactory.getService(refund.getRefundType());
//门面模式执行方法
refundRequestBean = refundBaseService.checkOrder(refund);
优点讲解
扩展性极强,想想看,需要扩展一个新的方法,是不是只需要增加一个实现类实现方法即可。
应用场景
- 不同支付方式走不同的支付类
- 不同状态走不同的处理类
网友评论