初步認(rèn)知
模板模式:抽象類中,有一個(gè)主方法杯拐,再定義1…n個(gè)方法霞篡,可以是抽象的世蔗,也可以是實(shí)際的方法端逼。定義一個(gè)類,繼承該抽象類污淋,重寫(xiě)抽象方法顶滩,通過(guò)調(diào)用抽象類中的主方法,實(shí)現(xiàn)對(duì)子類的調(diào)用寸爆,先看個(gè)關(guān)系圖:
簡(jiǎn)易架構(gòu)
實(shí)例分析
模板抽象類
public abstract class AbstartTemplate {
//主方法礁鲁,來(lái)調(diào)動(dòng)子類的重寫(xiě)的執(zhí)行方法
? ? public final void execute(String message){
System.out.println("0 step the Abstract Class is executing!");
? ? ? ? String introduction = prepare(message);
? ? ? ? execute(message,introduction);
? ? }
//提供給子類來(lái)重寫(xiě)執(zhí)行過(guò)程
? ? public? abstract void execute(String message, String introduction);
? ? public? Stringprepare(String message){
System.out.println("1. prepare deliver message is "+message);
? ? ? ? return "prepare"+message;
? ? }
}
模板繼承類
public class Template extends AbstartTemplate {
@Override
? ? public void execute(String message, String introduction) {
System.out.println("2."+this.getClass().getCanonicalName()+" has executed!");
? ? }
}
測(cè)試類
public class TestOfTemplate {
public static void main(String[] args) {
AbstartTemplate template =new Template();
? ? ? ? template.execute("comprehension");
? ? }
}
運(yùn)行結(jié)果:
0 step the Abstract Class is executing!
1. prepare deliver message is comprehension
2.com.com.model.design.template.Template has executed!
總結(jié)
? ? ? ? ? ?在主體方法中,prepare方法始終會(huì)在實(shí)現(xiàn)類中的execute方法之前執(zhí)行赁豆,其實(shí)我們還可以在execute方法之后也寫(xiě)一個(gè)響應(yīng)的after方法做相應(yīng)的操作仅醇,這樣一來(lái)就好比形成了一個(gè)固定的模板一樣,先執(zhí)行模板prepare具體操作,在執(zhí)行實(shí)現(xiàn)類中的execute方法魔种,最后執(zhí)行after中的固定操作析二。所有繼承了此模板的子類都會(huì)按照這個(gè)步驟或者模式處理相應(yīng)的業(yè)務(wù)。
? ? ? ? ? ? 其實(shí)在SpringMVC中就有這種類似的模式节预,Prepare相當(dāng)于請(qǐng)求處理部分叶摄,execute相當(dāng)action中的具體業(yè)務(wù)處理(每次處理業(yè)務(wù)的具體邏輯不同,所以需要每個(gè)action根據(jù)自身實(shí)際重寫(xiě))安拟,after就相當(dāng)于響應(yīng)部分蛤吓。