摘要:從李淵開國看模板方法模式假如史書記載沒有水分的話,那么相對于其他開國皇帝,李淵的難度最低,畢竟什么事情都交給他兒子干就完事了。而李世民則接受李淵的調(diào)遣,負(fù)責(zé)實現(xiàn)各個細(xì)節(jié)。模板方法模式是抽象與實踐分離的又一個經(jīng)典實踐。
Template Method: 從李淵開國看模板方法模式
假如史書記載沒有水分的話,那么相對于其他開國皇帝,李淵的難度最低,畢竟什么事情都交給他兒子干就完事了。
從晉陽起兵,李淵父子用了七年時間,先后消滅薛舉父子、李軌、宋金剛、劉武周、王世充、竇建德、蕭銑、杜伏威和梁師都等割據(jù)勢力。
其中薛舉父子、宋金剛、劉武周、王世充、竇建德、杜伏威(招降)、梁師都都是被李世民擊敗的。
那么我們把李淵開國用Java代碼描述就是:
abstract class 李淵{ abstract void 消滅薛舉父子(); abstract void 消滅李軌(); abstract void 消滅宋金剛(); abstract void 消滅劉武周(); abstract void 消滅王世充(); abstract void 消滅竇建德(); void 消滅蕭銑(){ System.out.println("消滅了蕭銑"); } abstract void 召降杜伏威(); abstract void 消滅梁師都(); }
然后你可以看到,除了消滅蕭銑,我把其他方法都寫成了抽象方法,因為我們知道這些事都不是李淵自己直接做的。
那么李淵想建立唐朝的話,他只需要一個個調(diào)用方法就行了
abstract class 李淵{ abstract void 消滅薛舉父子(); abstract void 消滅李軌(); abstract void 消滅宋金剛(); abstract void 消滅劉武周(); abstract void 消滅王世充(); abstract void 消滅竇建德(); void 消滅蕭銑(){ System.out.println("消滅了蕭銑"); } abstract void 召降杜伏威(); abstract void 消滅梁師都(); public void 建立唐朝(){ 消滅薛舉父子(); 消滅李軌(); 消滅宋金剛(); 消滅劉武周(); 消滅王世充(); 消滅竇建德(); 消滅蕭銑(); 召降杜伏威(); 消滅梁師都(); System.out.println("李唐建立了"); } }
簡單的來說就是這樣的。但是真的想開國的話,不能只有抽象方法啊,還必須一步一步的真正的實現(xiàn)上面的方法,這時候李世民就來了。李世民作為李淵的兒子,直接繼承父類就行了。
class 李世民 extends 李淵{ @Override void 消滅薛舉父子() { System.out.println("消滅薛舉父子"); } @Override void 消滅李軌() { System.out.println("消滅李軌"); } @Override void 消滅宋金剛() { System.out.println("消滅宋金剛"); } @Override void 消滅劉武周() { System.out.println("消滅劉武周"); } @Override void 消滅王世充() { System.out.println("消滅王世充"); } @Override void 消滅竇建德() { System.out.println("消滅竇建德"); } @Override void 召降杜伏威() { System.out.println("召降杜伏威"); } @Override void 消滅梁師都() { System.out.println("消滅梁師都"); } }
我們的李世民類實現(xiàn)了李淵沒有實現(xiàn)的方法。
然后我們來測試下建立唐朝
public class Test { public static void main(String[] args) { 李淵 liYuan = new 李世民(); liYuan.建立唐朝(); } }
額李淵 liYuan = new 李世民();這個語句邏輯上看著有點怪異啊,不過意思就是這個意思吧。
作為父類的李淵,給出了統(tǒng)一天下的整體戰(zhàn)略,而具體實施的細(xì)節(jié)就是交給子類來,讓我們的代碼依賴于抽象而不是具體的實現(xiàn),這是軟件工程中的經(jīng)典做法。
假如另一個時空,沒有李世民,那么李淵也可以讓其他子女替他完成各個戰(zhàn)略,比如這樣的
class 平陽公主 extends 李淵{ @Override void 消滅薛舉父子() { System.out.println("平陽公主了消滅薛舉父子"); } // ... } public class Test { public static void main(String[] args) { 李淵 liYuan = new 平陽公主(); liYuan.建立唐朝(); } }
模板方法的核心在于為了完成一件事情(比如建立唐朝),很有可能需要做大量的事情。
但是如果讓一個類包含實現(xiàn)這個目的所用到所有的細(xì)節(jié),會讓代碼很臃腫。我們把抽象和實現(xiàn)分離。李淵作為總指揮官,負(fù)責(zé)全局戰(zhàn)略上的全局調(diào)度,但是不負(fù)責(zé)細(xì)節(jié)的實現(xiàn)。而李世民則接受李淵的調(diào)遣,負(fù)責(zé)實現(xiàn)各個細(xì)節(jié)。
模板方法模式是抽象與實踐分離的又一個經(jīng)典實踐。
原文發(fā)布于github
https://github.com/fish-stack...
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/75444.html
摘要:示例如下靜態(tài)路由使用動態(tài)變量的路由未指定變量類型使用動態(tài)變量的路由指定變量類型指定的路由變量,可以作為被裝飾的函數(shù)參數(shù)傳入進(jìn)來。 開始決定認(rèn)真的在網(wǎng)上寫一些東西,主要原因還是在于希望能提升學(xué)習(xí)效果。雖說python寫了有幾年,但是web后端框架的確沒怎么接觸過,買了本狗書寥寥草草的過了一遍,發(fā)現(xiàn)很多東西還是理解不深,真的是好記性不如爛筆頭,知識也要從基礎(chǔ)開始,退回來好好看看官方文檔,再...
摘要:綁定到子組件屬性綁定到父組件屬性在子組件模板內(nèi)將指令綁定到子組件屬性列表第一項,由于父組件找不到屬性,將不會顯示。哪都通快遞龍虎山天師府曜星社內(nèi)容分發(fā)中的被插入中,并且因為中的指令而進(jìn)行迭代,迭代之后通過獲取上的屬性數(shù)據(jù)。 組件的作用域(一) 父組件模板的內(nèi)容在父組件作用域內(nèi)編譯;子組件模板的內(nèi)容在子組件作用域內(nèi)編譯。 父子組件的編譯相互獨立,編譯時只能使用各自作用域中的屬性和方法,例...
摘要:綁定到子組件屬性綁定到父組件屬性在子組件模板內(nèi)將指令綁定到子組件屬性列表第一項,由于父組件找不到屬性,將不會顯示。哪都通快遞龍虎山天師府曜星社內(nèi)容分發(fā)中的被插入中,并且因為中的指令而進(jìn)行迭代,迭代之后通過獲取上的屬性數(shù)據(jù)。 組件的作用域(一) 父組件模板的內(nèi)容在父組件作用域內(nèi)編譯;子組件模板的內(nèi)容在子組件作用域內(nèi)編譯。 父子組件的編譯相互獨立,編譯時只能使用各自作用域中的屬性和方法,例...
摘要:具體可配置的項可以參看其源代碼。那引擎對象是如何被構(gòu)造出來的呢看這句由此,我們進(jìn)入了的核心構(gòu)造函數(shù),。由于該構(gòu)造函數(shù)篇幅很長,我們先看下簡略版的結(jié)構(gòu),然后拆開來分析。此外,推薦使用注冊自定義函數(shù),而非使用。 Juicer.js源碼解讀 Version: 0.6.9-stable Date: 8th of Aug, 2015 個人能力有限,如有分析不當(dāng)?shù)牡胤剑瑧┱堉?..
摘要:分發(fā)處理器將會掃描使用了該注解的類的方法,并檢測該方法是否使用了注解。作用該注解用于將的方法返回的對象,通過適當(dāng)?shù)霓D(zhuǎn)換為指定格式后,寫入到對象的數(shù)據(jù)區(qū)。用于注解層,在類上面注解。使用標(biāo)記的參數(shù)。 1、@Controller 在SpringMVC 中,控制器Controller 負(fù)責(zé)處理由DispatcherServlet 分發(fā)的請求,它把用戶請求的數(shù)據(jù)經(jīng)過業(yè)務(wù)處理層處理之后封裝成一個M...
閱讀 2513·2023-04-25 17:37
閱讀 1195·2021-11-24 10:29
閱讀 3701·2021-09-09 11:57
閱讀 697·2021-08-10 09:41
閱讀 2249·2019-08-30 15:55
閱讀 2817·2019-08-30 15:54
閱讀 1948·2019-08-30 15:53
閱讀 900·2019-08-30 15:43