一、介绍
在模板模式中,一个抽象类公开定义了执行它的方法的方式/模式,让子类不改变算法架构的情况下,重新定义算法中的某些步骤。
UML类图如下:
二、何时使用
有一些通用的方法,但是每个子类都需要重写 的时候
三、实现
我们以造汽车为例,比如每个汽车都有鸣笛、启动、停止……这些功能,我们可以将这些动能抽象出来,然后子类各自实现,但是他们的运行顺序时不能变的,启动-->鸣笛-->停止这个执行顺序是不可以变的。
public abstract class CarModel {
protected abstract void whistle();
protected abstract void startCar();
protected abstract void stopCar();
public final void run(){
startCar();
whistle();
stopCar();
}
}
public class MyCar extends CarModel {
@Override
protected void whistle() {
System.out.println("我的汽车鸣笛……");
}
@Override
protected void startCar() {
System.out.println("我的汽车启动……");
}
@Override
protected void stopCar() {
System.out.println("我的汽车停车……");
}
}
public static void main(String[] args) {
MyCar myCar = new MyCar();
myCar.run();
}
四、优缺点
优点:
1、封装不变部分,扩展可变部分
2、提取公共代码便于维护
3、行为由父类控制,子类实现
缺点:每一个实现都要增加一个子类,导致类数量增加使得系统功能加庞大。