1. 什么是模板方法模式
概念:
定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
通俗的讲,模板方法模式是通过把不变行为搬到超类,去除子类里面的重复代码提现它的优势,它提供了一个很好的代码复用平台。当不可变和可变的方法在子类中混合在一起的时候,不变的方法就会在子类中多次出现,这样如果摸个方法需要修改则需要修改很多个,虽然这个这个问题在设计之初就应该想好。这个时候模板方法模式就起到了作用了,通过模板方法模式把这些重复出现的方法搬到单一的地方,这样就可以帮助子类摆脱重复不变的纠缠。
2. 模板方法模式UML图
3. 模板方法模式代码
/**
* 汽车模型抽象类
* @author
* @date 2018/01/29
*/
public abstract class CarModel {
/**
* 汽车启动
*/
abstract void start();
/**
* 汽车停止
*/
abstract void stop();
/**
* 用户并不需要关心你的车怎么启动或者停下来,可以开始、可以停止就可以了
*/
final public void excet() {
this.start();
this.stop();
}
}
/**
* @author
* @date 2018/01/29
*/
public class Wcar extends CarModel {
@Override
void start() {
System.out.println("大众车启动...");
}
@Override
void stop() {
System.out.println("大众车停止...");
}
}
/**
* @author
* @date 2018/01/29
*/
public class Ocar extends CarModel {
@Override
void start() {
System.out.println("奥迪车启动...");
}
@Override
void stop() {
System.out.println("奥迪车停止...");
}
}
/**
* @author
* @date 2018/01/29
*/
public class Client {
public static void main(String[] args) {
CarModel carModel1 = new Wcar();
carModel1.excet();
CarModel carModel2 = new Ocar();
carModel2.excet();
}
}
4. 总结
模板方法模式就是为了将重复不变的代码提取到一个抽象类中。当我们要完成在某一细节层次一致的一个过程或一系列步骤,但其个别步骤在更详细的层次上的实现可能不同时,我们通常考虑用模板方法模式来处理。