模板方法模式是採用抽象類來實現的。在抽象類定義一個模板方法,在模板方法中,按照固定的順序來調用基本方法。
同時模板方法一般被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();
}
}