设计模式-模板方法模式

抽象类把部分业务逻辑用具体方法具体实现,或者构造方法里面实现,而把其他需要子类来完成的方法设置为抽象方法,迫使子类务必实现。每种子类都可以以不同的方式进行具体实现,这就是模板方法模式。

先来看下 UML 的类图,比较简单

这里的抽象类就是抽象模板类,定义一个或者多个抽象方法,迫使子类来完成。同时定义一个模板方法,该方法一般情况下是一个具体方法,给出模板方法的执行过程,里面调用抽象方法。

具体的实现子类是把抽象类里面务必要实现的方法进行具体实现,成为父级模板方法里面的组成部分。

看下具体代码: 首先是抽象模板类

public abstract class AbstractTemplate {    //模板方法
    public void templete(){
        first();
        second();
        third();
    }    //下面三个抽象方法需要子类来具体实现
    public abstract void first();    public abstract void second();    public abstract void third();

}

接下来看具体实现,这个具体类是把大象装进冰箱的步骤

public class ConcreteTemplete extends AbstractTemplate{    @Override
    public void first() {
        System.out.println("第一步开启冰箱");
    }    @Override
    public void second() {
        System.out.println("第二步把大象塞进去");
    }    @Override
    public void third() {
        System.out.println("第三步关闭冰箱");
    }

}

测试下

public class Client {    public static void main(String[] args) {
        AbstractTemplate template=new ConcreteTemplete();
        template.templete();
    }
}

几点经验: 1、模板方法模式把复用代码集中到父类,子类可以直接调用; 2、抽象的父类可以级联,进行有效的复用部分代码; 3、一般和生命周期(生命周期一般会有几个阶段)有关的东西可以考虑该模式

原文发布于微信公众号 - 技术与生活(technology_life)

原文发表时间:2016-11-06

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java 源码分析

并查集

​ 在我们需要判断某一些事物之间是否存在一定的关系的时候,我们最好的办法不是使用图而是使用并查集。因为我们关心的是他们之间是否有关系,而不是关心的他们到底...

3567
来自专栏专注数据中心高性能网络技术研发

HERD--GCC宏

减少跳转语句失效时CPU等待取指令时间,提高CPU效率 使用__builtin_expect(EXP,N) 意思是EXP==N的概率很大 一般封装为LIKELY...

2965
来自专栏我的博客

TP入门第十二天

1、模板技术 为何使用模板这里就不罗嗦了,直接介绍模板技术 变量传递和显示: 例如在action里面可以这样写 $title=”变量”; $arr=array(...

3366
来自专栏林德熙的博客

dotnet 设计规范 · 数组定义

X 不建议设置数组类型的字段为只读。虽然用户不能修改字段,但是可以修改字段里面的元素。如果需要一个只读的集合,建议定义为只读集合。

761
来自专栏章鱼的慢慢技术路

Go指南_指针接收者

1022
来自专栏编程

linux基础(三)

一、文本处理工具 1、文本查看工具less和cat cat -E filename 能看到行的结束符 -A filename 能看到tab键 回车 (hexdu...

2607
来自专栏技术换美食换不换

lua

数学库由算术函数的标准集合组成,比如三角函数库(sin, cos, tan, asin, acos, etc.), 幂指函数(exp, log, log10),...

1222
来自专栏生信宝典

Python学习教程(三)

函数操作 函数是重用的程序段。它们允许你给一块语句一个名称,然后你可以在你的程序的任何地方使用这个名称任意多次地运行这个语句块。这被称为 调用 函数。我们已经使...

2239
来自专栏Coco的专栏

Javascript优化细节:短路表达式

1474
来自专栏python读书笔记

《算法图解》NOTE 5 散列表1.散列表简介2.散列表的特点2.1优点2.2缺点3.应用

1895

扫码关注云+社区

领取腾讯云代金券