又以汽车生产为例。
package template;
public abstract class CarTemplate {
public abstract void installWheel();
public abstract void installEngine();
public abstract void paint();
public abstract void innerDecoration();
public void produceCar() {
installWheel();
installEngine();
paint();
innerDecoration();
}
}
package template;
public class Benz extends CarTemplate{
@Override
public void installWheel() {
System.out.println("安装奔驰轮子");
}
@Override
public void installEngine() {
System.out.println("安装奔驰引擎");
}
@Override
public void paint() {
System.out.println("刷奔驰漆");
}
@Override
public void innerDecoration() {
System.out.println("安装奔驰内饰");
}
}
package template;
public class Toyota extends CarTemplate{
@Override
public void installWheel() {
System.out.println("安装丰田轮子");
}
@Override
public void installEngine() {
System.out.println("安装丰田引擎");
}
@Override
public void paint() {
System.out.println("刷丰田漆");
}
@Override
public void innerDecoration() {
System.out.println("安装丰田内饰");
}
}
package template;
public class TemplateTest {
public static void main(String[] args) {
CarTemplate benz=new Benz();
benz.produceCar();
CarTemplate toyota=new Toyota();
toyota.produceCar();
}
}
打印结果:
安装奔驰轮子
安装奔驰引擎
刷奔驰漆
安装奔驰内饰
安装丰田轮子
安装丰田引擎
刷丰田漆
安装丰田内饰
小结:
1.模板方法与建造者模式区别:
(1)模板方法模板是固定的,流程不可变,只有实现细节可变,建造者模式流程也可变;
(2)建造者模式一般会返回一个对象,模板方法则不需要