设计模式之 模板模式开发

模板模式

注:文章中的超链接才是重点

在模板模式(Template Pattern)中,一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。这种类型的设计模式属于行为型模式。

针对模板模式 我做了些修改 灵感来源于 并发编程中的 线程池  Executor

业务场景介绍

有一个执行业务流程,一批数据需要按照一定的流程进行完毕,针对不同的分支,和不同的实现,我们采用顶层接口,中间抽象类,底层具体实现的原则。

暴露出去的只有中间抽象的模板方法即可。

顶层接口:

IOrderHandler
package com.monco.skeleton;

import com.monco.entity.Order;

/**
 * @author monco
 * @data 2020/8/8 17:58
 * @description : 订单业务处理接口
 */
public interface IOrderHandler {

    /**
     * 创建订单
     *
     * @param order 订单实体
     */
    void createOrder(Order order);

    /**
     * 修改订单
     *
     * @param order 订单实体
     */
    void updateOrder(Order order);


}

抽象类继承:

AbstractOrderHandler
package com.monco.skeleton;

import com.monco.entity.Order;

/**
 * @author monco
 * @data 2020/8/8 18:01
 * @description : 定义订单处理统一方法
 */
public abstract class AbstractOrderHandler implements IOrderHandler {

    /**
     * 实现公共的 订单创建
     *
     * @param order 订单实体
     */
    @Override
    public void createOrder(Order order) {
        System.out.println("创建的订单号为:" + order.getOrderNo() + "创建的订单名称为:" + order.getOrderName());
    }


    /**
     * 处理订单流程
     *
     * @param order 订单实体
     */
    public final void handler(Order order) {
        createOrder(order);
        updateOrder(order);
    }
}

不同子类实现:

AutoOrderHandler
package com.monco.skeleton;

import com.monco.entity.Order;

/**
 * @author monco
 * @data 2020/8/8 18:04
 * @description : 订单自动处理
 */
public class AutoOrderHandler extends AbstractOrderHandler {

    @Override
    public void updateOrder(Order order) {
        System.out.println("自动修改订单信息");
    }


}
ManualOrderHandler
package com.monco.skeleton;

import com.monco.entity.Order;

/**
 * @author monco
 * @data 2020/8/8 18:05
 * @description : 订单手动处理
 */
public class ManualOrderHandler extends AbstractOrderHandler {

    @Override
    public void updateOrder(Order order) {
        System.out.println("手动修改订单信息");
    }
}

测试:

package com.monco.skeleton;

import com.monco.entity.Order;

/**
 * @author monco
 * @data 2020/8/8 18:08
 * @description : 骨架测试
 */
public class SkeletonTest {

    public static void main(String[] args) {
        Order order = new Order("1","第一个订单");
        AbstractOrderHandler abstractOrderHandler = new ManualOrderHandler();
        abstractOrderHandler.handler(order);

        AbstractOrderHandler handler = new AutoOrderHandler();
        handler.handler(order);
    }

}

运行结果:

 

 

我们可以针对流程问题进行分别处理,使用骨架和模板方法结合,可以使代码简介明了。
原创不易,求各位大佬多多提点。

posted @ 2020-08-09 22:24  一南  阅读(207)  评论(0编辑  收藏  举报