模板模式
定義一個操作中的算法的骨架,而將一些步驟延遲到子類中。 模板方法使得子類可以不改變一個算法的結(jié)構(gòu)即可重定義該算法的某些特定步驟。通俗的說的就是有很多相同的步驟的,在某一些地方可能有一些差別適合于這種模式,如大話設(shè)計模式中說到的考試場景中,每個人的試卷都是一樣的,只有答案不一樣。這種場景就適合于模板方法模式。我這次自己寫的是一個汽車啟動的過程,每一種汽車啟動的過程都基本是一樣的流程,無非是這一過程中存在一些細小差別。
總的來說,模板模式就是通過抽象類來定義一個邏輯模板,邏輯框架、邏輯原型,然后將無法決定的部分抽象成抽象類交由子類來實現(xiàn),一般這些抽象類的調(diào)用邏輯還是在抽象類中完成的。這么看來,模板就是定義一個框架,比如造車子,需要造車輪,車身,發(fā)動機,車燈等部分組成,不同的車的區(qū)別就在于這些部件的優(yōu)劣而已,但是總少不了這些東西。下面我就用一個例子來造一輛路虎越野車和一輛奧迪轎車。
模板模式實戰(zhàn)
首先需要創(chuàng)建一個模板抽象父類,將造車需要的模塊創(chuàng)建好。
public abstract class CarTemplate {
protected String name;
protected CarTemplate(String name){
this.name = name;
}
protected abstract void buildWheel();
protected abstract void buildEngine();
protected abstract void buildCarbody();
protected abstract void buildCarlight();
public final void buildCar(){
buildWheel();
buildEngine();
buildCarbody();
buildCarlight();
}
}
然后創(chuàng)建一個造路虎車的子類,用這個子類去繼承造車的公有模塊類CarTemplate。然后在方法中完善造路虎車特有的功能,代碼如下:
public class LandRover extends CarTemplate{
public LandRover(String name) {
super(name);
}
@Override
protected void buildWheel() {
System.out.println(name + "越野車輪");
}
@Override
protected void buildEngine() {
System.out.println(name + "柴油發(fā)動機");
}
@Override
protected void buildCarbody() {
System.out.println(name + "SUV越野車型");
}
@Override
protected void buildCarlight() {
System.out.println(name + "普通車燈");
}
}
再創(chuàng)建一個造奧迪的子類,同樣用這個子類繼承模板類,并完善造奧迪的方法,代碼如下:
public class Audi extends CarTemplate {
public Audi(String name) {
super(name);
}
@Override
protected void buildWheel() {
System.out.println(name + "的普通轎車車輪");
}
@Override
protected void buildEngine() {
System.out.println(name + "的汽油發(fā)動機");
}
@Override
protected void buildCarbody() {
System.out.println(name + "的豪華舒適性車身");
}
@Override
protected void buildCarlight() {
System.out.println(name + "的獨特魔力車燈");
}
}
測試
public class TemplateTest {
public static void main(String[] args) {
CarTemplate car1 = new LandRover("路虎");
CarTemplate car2 = new Audi("奧迪");
car1.buildCar();
car2.buildCar();
}
}
執(zhí)行結(jié)果
所有步驟都已完成,奧迪和路虎車運用統(tǒng)一模板,但是通過在子類中完善各自不同的方法而達到目的

image.png