概念理解
在模板模式中,抽象類定義了做一件事情的步驟东抹,步驟中相同的實(shí)現(xiàn)方式放在抽象類中蚂子,個(gè)性化的實(shí)現(xiàn)放在子類中。模板模式是一種行為型模式缭黔∈尘ィ總的來說,模板模式就是超類做流程馏谨,子類做細(xì)節(jié)别渔。
模板模式的結(jié)構(gòu)
考慮制作鮮榨果汁的例子,鮮榨果汁統(tǒng)一的步驟是準(zhǔn)備水果,榨汁哎媚,過濾喇伯,包裝。其中根據(jù)果汁種類的不同拨与,準(zhǔn)備的水果不同稻据,榨汁,過濾买喧,包裝都是一樣的捻悯,子類僅需要實(shí)現(xiàn)準(zhǔn)備水果的步驟就可以了。
代碼實(shí)例
public abstract class Juice {
public final void makeJuice(){
prepare();
press();
filter();
pack();
}
private void press() {
System.out.println("fruit is pressed");
}
private void pack() {
System.out.println("juice is packed");
}
private void filter() {
System.out.println("juice is filtered");
}
protected abstract void prepare();
}
public class AppleJuice extends Juice {
@Override
protected void prepare() {
System.out.println("apple is prepared");
}
}
public class OrangeJuice extends Juice {
@Override
protected void prepare() {
System.out.println("organge is prepare");
}
}
好萊塢原則
好萊塢原則是不要打電話給我們淤毛,有事我們會打電話給你今缚。這是高層(抽象類)和低層(具體實(shí)現(xiàn)類)之間的關(guān)系。高層關(guān)注的是流程低淡,高層能調(diào)用低層姓言,低層不能調(diào)用高層。模板模式很好的體現(xiàn)了這個(gè)原則蔗蹋。
總結(jié)
優(yōu)點(diǎn):模板模式封裝了不變的部分何荚,擴(kuò)展了可變的部分,便于維護(hù)
注意點(diǎn):為了防止被惡意覆蓋纸颜,抽象類中的模板方法需要加上final關(guān)鍵字兽泣。
代碼實(shí)例參見https://github.com/jxl198/designPattern/tree/master/template