【设计模式-模板方法模式】

时间:2022-07-24
本文章向大家介绍【设计模式-模板方法模式】,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

【导读】有很多过程是有流程步骤的,即是先做什么,后做什么,都已经定义好了,但具体每个步骤怎么去实现交由具体实施人。这个就是模板方法。

一、定义

定义了一个算法骨架,允许子类为一个或多个步骤提供实现。使子类可以在不改变算法结构的情况下,重新定义算法的某些步骤。

二、实例

比如房屋建造有几个步骤,地基、主体以及装修。此时会有毛坯房以及精装修两种情况。

抽象房屋对象:

public abstract class AbstractHouse {

    /**
     *@author liusy
     *@date 2020/3/6 0006 23:53
     *@desc 定义一个建造房屋的固定步骤,也就是模板  
     *@param  * @param null
     *@return
     */
    protected final void makeHouse(){
        makeBase();
        makeFrame();
        //是否需要进行精装修
        if (isFitment()) {
            makeFitment();
        }
        System.out.println("房子建造完成");
    }

    final void makeBase(){
        System.out.println("创建地基");
    }

    final void makeFrame(){
        System.out.println("建造主体");
    }

    final void makeFitment(){
        System.out.println("对房子进行精装修");
    }


    /**
     *@author liusy
     *@date 2020/3/6 0006 23:52
     *@desc
     *@param  * @param null
     *@return 是否需要进行精装修
     */
    protected abstract boolean isFitment();

}

精装修:

public class FitmentHouse extends AbstractHouse{
    @Override
    protected boolean isFitment() {
        return true;
    }
}

毛坯房:

public class RoughcastHourse extends AbstractHouse{
    //返回false表示不需要进行精装修
    @Override
    protected boolean isFitment() {
        return false;
    }
}

测试类:

//精装修
AbstractHouse house = new FitmentHouse();
house.makeHouse();
System.out.println("==============================");
//毛坯房
AbstractHouse house1 = new RoughcastHourse();
house1.makeHouse();

运行结果:

接下来看一下类图:

三、源码实例

(1)HttpServlet的doGet或者doPost方法