模板方法模式
模板方法模式

使命
模板方法(Template Method Pattern)简单来说和抽象类继承雷同,需要注意的点是,模板方法抽象类定义了部分抽象方法,由子类实现,子类的执行结果影响父类的结果,也就是子类对父类产生了影响
优点
- 封装不变部分,拓展可变部分
- 提取公共代码,便于维护
- 行为由父类控制,子类实现
缺点
- 和继承的思想有点颠倒
继工厂模式后,我们知道现有一个造汽车的工厂,能量产各种汽车,而这些汽车是怎么生产的呢?结合实际来看,其实每辆车都是基于某个平台来生产的,而这种平台我们称之为模板,来看看例子。
奔驰汽车生产平台(模板)
public abstract class Benz {
public abstract void start();
public abstract boolean isTurbo();
public abstract void turboSound();
public void run(){
this.start();
if (isTurbo()){
this.turboSound();
}
}
}
C200
public class C200 extends Benz {
@Override
public void start() {
System.out.println("C200 开始启动啦");
}
@Override
public boolean isTurbo() {
return true;
}
@Override
public void turboSound() {
System.out.println("C200 涡轮声,wow,wow,wow......");
}
}
CLA
public class CLA extends Benz {
@Override
public void start() {
System.out.println("CLA 启动啦");
}
@Override
public boolean isTurbo() {
return false;
}
@Override
public void turboSound() {
}
}
开始生产
public class Client {
public static void main(String[] args) {
C200 c200 = new C200();
c200.run();
CLA cla = new CLA();
cla.run();
}
}

整个例子看起来并不复杂,甚至可以说就是简单的继承的做法,从这个例子可以看出子类的实现可以改变父类的模板方法执行结果,我们称isTurbo这种类型的方法为钩子方法(Hook Method),有了钩子方法的模板方法才算完美。