国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Template Method: 從李淵開國看模板方法模式

April / 1090人閱讀

摘要:從李淵開國看模板方法模式假如史書記載沒有水分的話,那么相對于其他開國皇帝,李淵的難度最低,畢竟什么事情都交給他兒子干就完事了。而李世民則接受李淵的調(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

相關(guān)文章

  • flask文檔學(xué)習(xí)筆記1-快速入門

    摘要:示例如下靜態(tài)路由使用動態(tài)變量的路由未指定變量類型使用動態(tài)變量的路由指定變量類型指定的路由變量,可以作為被裝飾的函數(shù)參數(shù)傳入進(jìn)來。 開始決定認(rèn)真的在網(wǎng)上寫一些東西,主要原因還是在于希望能提升學(xué)習(xí)效果。雖說python寫了有幾年,但是web后端框架的確沒怎么接觸過,買了本狗書寥寥草草的過了一遍,發(fā)現(xiàn)很多東西還是理解不深,真的是好記性不如爛筆頭,知識也要從基礎(chǔ)開始,退回來好好看看官方文檔,再...

    lingdududu 評論0 收藏0
  • 組件(4):使用slot進(jìn)行內(nèi)容分發(fā)

    摘要:綁定到子組件屬性綁定到父組件屬性在子組件模板內(nèi)將指令綁定到子組件屬性列表第一項,由于父組件找不到屬性,將不會顯示。哪都通快遞龍虎山天師府曜星社內(nèi)容分發(fā)中的被插入中,并且因為中的指令而進(jìn)行迭代,迭代之后通過獲取上的屬性數(shù)據(jù)。 組件的作用域(一) 父組件模板的內(nèi)容在父組件作用域內(nèi)編譯;子組件模板的內(nèi)容在子組件作用域內(nèi)編譯。 父子組件的編譯相互獨立,編譯時只能使用各自作用域中的屬性和方法,例...

    YanceyOfficial 評論0 收藏0
  • 組件(4):使用slot進(jìn)行內(nèi)容分發(fā)

    摘要:綁定到子組件屬性綁定到父組件屬性在子組件模板內(nèi)將指令綁定到子組件屬性列表第一項,由于父組件找不到屬性,將不會顯示。哪都通快遞龍虎山天師府曜星社內(nèi)容分發(fā)中的被插入中,并且因為中的指令而進(jìn)行迭代,迭代之后通過獲取上的屬性數(shù)據(jù)。 組件的作用域(一) 父組件模板的內(nèi)容在父組件作用域內(nèi)編譯;子組件模板的內(nèi)容在子組件作用域內(nèi)編譯。 父子組件的編譯相互獨立,編譯時只能使用各自作用域中的屬性和方法,例...

    molyzzx 評論0 收藏0
  • JavaScript > Juicer.js源碼解讀

    摘要:具體可配置的項可以參看其源代碼。那引擎對象是如何被構(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ù)牡胤剑瑧┱堉?..

    mrcode 評論0 收藏0
  • springmvc常用注解標(biāo)簽詳解

    摘要:分發(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...

    notebin 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<