设计模式:工厂+策略+门面模式的应用

使用工厂+策略模式增加系统的可扩展性

官方定义

工厂模式

定义一个创建对象的接口,让子类决定实例化哪一个类,工厂方式使得一个类的实例延迟到子类中

策略模式

定义一组算法,使每个算法封装起来,使得他们之间可以项目交换

门面模式

要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行。门面模式提供一个高层次的接口,使得子系统更易于使用

举个栗子

工厂类

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);

优点讲解

扩展性极强,想想看,需要扩展一个新的方法,是不是只需要增加一个实现类实现方法即可。
\color{red}{一个完美的系统,新的需求是不需要变更原有类的}

应用场景

  • 不同支付方式走不同的支付类
  • 不同状态走不同的处理类
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 该文章属于刘小壮原创,转载请注明:刘小壮[https://www.jianshu.com/u/2de707c93d...
    刘小壮阅读 12,875评论 29 59
  • 设计模式基本原则 开放-封闭原则(OCP),是说软件实体(类、模块、函数等等)应该可以拓展,但是不可修改。开-闭原...
    西山薄凉阅读 3,908评论 3 14
  • 创建型模式 工厂模式 工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设...
    liuyang7519阅读 336评论 0 2
  • 来到简书的你,想要收获到什么呢? 文|张小晶201402 你好,我是张小晶,我来简书一个月了。 一个月,应该说是很...
    世俗凡人阅读 1,413评论 26 24
  • 2018年1月19日起,我一直无处安放的心灵正式搬入简书安家,因为发现这里有很多有修为的人。古有千金买邻,与雅士为...
    云横千里阅读 263评论 8 17