zoukankan      html  css  js  c++  java
  • 设计模式之 模板模式开发

    模板模式

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

    在模板模式(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);
        }
    
    }

    运行结果:

    我们可以针对流程问题进行分别处理,使用骨架和模板方法结合,可以使代码简介明了。
    原创不易,求各位大佬多多提点。
    
    
  • 相关阅读:
    Rectangle Area
    【 2013 Multi-University Training Contest 8 】
    【 2013 Multi-University Training Contest 7 】
    【 2013 Multi-University Training Contest 6 】
    【 2013 Multi-University Training Contest 5 】
    【 2013 Multi-University Training Contest 4 】
    【 2013 Multi-University Training Contest 3 】
    【 2013 Multi-University Training Contest 2 】
    【 2013 Multi-University Training Contest 1 】
    GLConsole的编译和使用
  • 原文地址:https://www.cnblogs.com/monco-sxy/p/13466789.html
Copyright © 2011-2022 走看看