定义一个操做中的算法的框架,而将一些步骤延迟到子类中。使得子类不改变算法结构便可冲定义该算法的某些特定步骤。算法
也许看定义有些懵逼,可是模板方法模式在设计模式中算是简单的了,仅仅使用了Java的继承机制。可是它的应用是很是普遍的。咱们先举个简单的例子让你们对于模板方法模式有个直观的了解。设计模式
里面有两个角色bash
例如咱们定义个抽象的汽车类,里面有汽车启动、中止、喇叭三个操做。可是每一个汽车的这三个操做都是不一样的。可是向客户演示的时候都是一样操做启动、中止、按喇叭。因此这就是一个典型的模板方法模式。框架
abstract class AbstractCar{
protected abstract void run();
protected abstract void stop();
protected abstract void alarm();
public final void templateMethod(){
run();
stop();
alarm();
}
}
复制代码
接下来定义两辆实际的汽车ide
class BmwCar extends AbstractCar{
@Override
protected void run() {
System.out.println("宝马 跑");
}
@Override
protected void stop() {
System.out.println("宝马 停");
}
@Override
protected void alarm() {
System.out.println("宝马 喇叭叫");
}
}
class HmCar extends AbstractCar{
@Override
protected void run() {
System.out.println("悍马 跑");
}
@Override
protected void stop() {
System.out.println("悍马 停");
}
@Override
protected void alarm() {
System.out.println("悍马 喇叭叫");
}
}
复制代码
因此在调用的时候根据不一样的车建立不一样的角色便可spa
AbstractCar bmw = new BmwCar();
bmw.templateMethod();
AbstractCar hm = new HmCar();
hm.templateMethod();
复制代码
抽象模板中的基本方法尽可能设计为protected类型,符合迪米特法则,不须要暴露的属性或者方法尽可能设置为protected类型。设计