文章目录
一、简介
1.1 引入
在生活中,有很多事情我们需要按照确定的步骤去执行,但某些步骤的具体内容可能并不一样
比如:去银行办理业务流程,一般要经过:取号-排队-办理相关业务三个流程。但办理相关业务并不确定,可能是存款、取钱、转账、挂失等等
银行办理业务的流程就像是一个被封装好的模板,每个客户都会按照这个模板定义的步骤办理业务,但不同的客户办理的具体业务可能会有所不同
1.2 定义
模板方法(Template Method)模式:模板方法模式又叫模板模式,它定义一个操作中的算法骨架,而将算法的一些步骤延迟到子类中。模板方法使得子类可以在不改变该算法结构的情况下重新定义该算法的某些特定步骤
- 模板方法模式一种行为型模式
- 模板方法模式封装了一个算法步骤,子类相同的部分由父类统一实现,不同的部分由子类进行重写
二、模式原理
2.1 模式组成
- AbstractTemplate(抽象模板角色)
抽象模板角色是一个抽象类,负责给出一个算法的各个步骤(定义若干个方法)。它由一个模板方法和若干个基本方法构成- 模板方法:定义算法的骨架,包含若干个基本方法的调用顺序,一般不需要子类重写
- 基本方法:是一个方法是算法中的一个步骤,包含三种类型
- 抽象方法:在抽象模板中声明,由各个子类具体实现
- 具体方法:在抽象模板中已经实现,各个具体子类继承或重写
- 钩子方法:在抽象模板中已经实现,可以用来判断算法中的某个步骤是否需要执行
- ConcreteTemplate(具体模板角色)
具体模板是抽象模板的子类,实现 抽象模板 中的抽象方法
2.2 UML类图
三、实例
3.1 实例概况
- 概述:儿童节,老王带着小王去网吧上网,老王上网打游戏,让儿子小王看慕课娱乐一下
- 目的:利用模板方法模式实现老王和小王的"网吧之旅"(网吧之旅流程:开机-娱乐方式-关机)
3.2 步骤
- 步骤一:创建抽象模板类,将"网吧之旅"流程封装到模板方法中
//抽象模板类
public abstract class InternetTravel {
// 用户的名字
public String name;
public InternetTravel(String name) {
this.name = name;
}
// 模板方法,在模板方法中定义了"网吧之旅"的流程
public void templateMethod() {
System.out.println