前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【设计模式-模板方法模式】

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

作者头像
Liusy
发布2020-09-01 16:25:15
3170
发布2020-09-01 16:25:15
举报
文章被收录于专栏:Liusy01Liusy01

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

一、定义

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

二、实例

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

抽象房屋对象:

代码语言:javascript
复制
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();

}

精装修:

代码语言:javascript
复制
public class FitmentHouse extends AbstractHouse{
    @Override
    protected boolean isFitment() {
        return true;
    }
}

毛坯房:

代码语言:javascript
复制
public class RoughcastHourse extends AbstractHouse{
    //返回false表示不需要进行精装修
    @Override
    protected boolean isFitment() {
        return false;
    }
}

测试类:

代码语言:javascript
复制
//精装修
AbstractHouse house = new FitmentHouse();
house.makeHouse();
System.out.println("==============================");
//毛坯房
AbstractHouse house1 = new RoughcastHourse();
house1.makeHouse();

运行结果:

接下来看一下类图:

三、源码实例

(1)HttpServlet的doGet或者doPost方法

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-03-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Liusy01 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档