模板模式
定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。 模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。通俗的说的就是有很多相同的步骤的,在某一些地方可能有一些差别适合于这种模式,举例一个汽车启动的过程,每一种汽车启动的过程都基本是一样的流程,无非是这一过程中存在一些细小差别。
package com.roc.template;
/**
* 汽车模型
* 模型模式
*
*/
public abstract class CarModel {
/**
* 汽车启动
*/
protected abstract void start();
/**
* 停车
*/
protected abstract void stop();
/**
* 用户并不需要关注你的车怎么启动或者停下来的,可以开可以停就可以啦
*/
final public void excet(){
this.start();
this.stop();
}
}
package com.roc.template;
/**
* 大众车
*
*/
public class Wcar extends CarModel{
@Override
protected void start() {
System.out.println("大众车启动 。。。。。。。。突突突");
}
@Override
protected void stop() {
System.out.println("大众车停车。。。。。。。。。");
}
}
package com.roc.template;
public class Ocar extends CarModel{
@Override
protected void start() {
System.out.println("奥迪 无匙启动 突突突");
}
@Override
protected void stop() {
System.out.println("奥迪 停车 ");
}
}
package com.roc.template;
/**
* 客户端
*
*/
public class Client {
public static void main(String[] args) {
CarModel wcar=new Wcar();//家里的第一辆车,作为用户的我们并不需要关注车怎么启动的.子类变量变为父类。多态
wcar.excet();
//突然家里需要第二辆车了 奥迪 我们也不需要关注他怎么生产启动的
CarModel ocar=new Ocar();
ocar.excet();
}
}
模板方法模式适用场景
<1>一次性实现一个算法的不变的部分,并将可变的行为留给子类来实现。
<2>各子类中公共的行为应被提取出来并集中到一个公共父类中以避免代码重复。
<3>控制子类扩展。模板方法只在特定点调用“hook”操作,这样就只允许在这些点进行扩展。