模板方法模式是采用抽象类来实现的。在抽象类定义一个模板方法,在模板方法中,按照固定的顺序来调用基本方法。
同时模板方法一般被final public修饰。
模板方法的uml类图:
举一个车子的例子。
宝马车跑动,需要启动,鸣笛,停止;
奔驰车跑动,也是需要启动,鸣笛,停止;
package com.learn.design.template;
/**
* Created by liuyingzi on 2018/9/6.
*/
public abstract class Car {
abstract void start();
abstract void stop();
abstract void alarm();
public final void run(){
this.start();
this.alarm();
this.stop();
}
}
package com.learn.design.template;
/**
* Created by liuyingzi on 2018/9/6.
*/
public class BWMCar extends Car {
@Override
void start(){
System.out.println("BWM start ....");
}
@Override
void alarm() {
System.out.println("BWM alarm ....");
}
@Override
void stop() {
System.out.println("BWM stop ....");
}
}
package com.learn.design.template;
/**
* Created by liuyingzi on 2018/9/6.
*/
public class BenZCar extends Car {
@Override
void start(){
System.out.println("BenZCar start ....");
}
@Override
void alarm() {
System.out.println("BenZCar alarm ....");
}
@Override
void stop() {
System.out.println("BenZCar stop ....");
}
}
package com.learn.design.template;
import com.learn.design.builder.KFCDirector;
import com.learn.design.builder.TaocanKFCBuilder1;
import com.learn.design.builder.TaocanKFCBuilder2;
/**
* Created by liuyingzi on 2018/9/5.
*/
public class MainTest {
/**
*
* @param args
*/
public static void main(String[] args){
BWMCar bwm = new BWMCar();
bwm.run();
BenZCar benz = new BenZCar();
benz.run();
}
}