1 什么是设计模式?
设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。简单点说,设计模式就是对问题行之有效的解决方式,是一种思想。
2 什么是模板方法模式?
模板方法模式是一种基于继承的代码复用技术,它是一种类行为型模式。模板方法模式是结构最简单的行为型设计模式,在其结构中只存在父类与子类之间的继承关系。
通过使用模板方法模式,可以将一些复杂流程的实现步骤封装在一系列基本方法中,在抽象父类中提供一个称之为模板方法的方法来定义这些基本方法的执行次序,而通过其子类来覆盖某些步骤,从而使得相同的算法框架可以有不同的执行结果。模板方法模式提供了一个模板方法来定义算法框架,而某些具体步骤的实现可以在其子类中完成。
3 如何实现模板方法模式?
3.1 模板方法
一个模板方法是定义在抽象类中,把基本操作方法组合在一起形成一个总算法或一个总行为的方法。这个模板方法定义在抽象类中,并由子类不加以修改地完全继承下来。模板方法是一个具体方法,它给出了一个顶层逻辑框架,而逻辑的组成步骤在抽象类中可以是具体方法,也可以是抽象方法。由于模板方法是具体方法,因此模板方法模式中的抽象层只能是抽象类,而不是接口。
3.2 基本方法
基本方法是实现算法各个步骤的方法,是模板方法的组成部分。基本方法又可以分为三种:抽象方法(Abstract Method)、具体方法(Concrete Method)和钩子方法(Hook Method)。
- 抽象方法:一个抽象方法由抽象类声明,由其具体子类实现。一个抽象方法以abstract关键字标识,并要求其子类必须重写该方法。
- 具体方法:一个具体方法由一个抽象类或具体类声明并实现,其子类可以进行覆盖也可以直接继承。
- 钩子方法:一个钩子方法由一个抽象类或具体类声明并实现,而其子类可能会加以扩展。通常在父类中给出的实现是一个空实现,并以该空实现作为方法的默认实现,当然钩子方法也可以提供一个非空的默认实现。比较典型的钩子方法,当属 HttpServlet 中的 doGet 和 doPost 方法啦!
3.3 实现步骤
首先,定义一个抽象类,并在该抽象类中定义一些方法,此处方法的类型可以是上述的抽象方法、具体方法或者钩子方法;然后,再建立一个模板方法,将一些基本的操作方法封装起来;最后,建立一个子类继承该抽象类,并实现其抽象方法。
4 模板方法模式的 Java 实现示例
/**
* 建立抽象父类
*/
public abstract class Car {
public abstract void fire(); // 启动
public abstract void drive(); // 行驶
public abstract void stop(); // 停车
public void oldDriver() { // 老司机来也
fire();
drive();
stop();
}
}
/**
* 建立子类,并实现父类的抽象方法
*/
public class Aodi extends Car {
public void fire() {
System.out.println("Aodi fire...");
}
public void dirve() {
System.out.println("Aodi dirve...");
}
public void stop() {
System.out.println("Aodi stop...");
}
}
/**
* 建立测试类
*/
public class Ceshi {
public static void main(Sting[] args) {
Car car = new Car();
car.oldDriver();
}
}