亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

Template Method: 從李淵開國(guó)看模板方法模式

April / 1150人閱讀

摘要:從李淵開國(guó)看模板方法模式假如史書記載沒有水分的話,那么相對(duì)于其他開國(guó)皇帝,李淵的難度最低,畢竟什么事情都交給他兒子干就完事了。而李世民則接受李淵的調(diào)遣,負(fù)責(zé)實(shí)現(xiàn)各個(gè)細(xì)節(jié)。模板方法模式是抽象與實(shí)踐分離的又一個(gè)經(jīng)典實(shí)踐。

Template Method: 從李淵開國(guó)看模板方法模式

假如史書記載沒有水分的話,那么相對(duì)于其他開國(guó)皇帝,李淵的難度最低,畢竟什么事情都交給他兒子干就完事了。

從晉陽(yáng)起兵,李淵父子用了七年時(shí)間,先后消滅薛舉父子、李軌、宋金剛、劉武周、王世充、竇建德、蕭銑、杜伏威和梁師都等割據(jù)勢(shì)力。

其中薛舉父子、宋金剛、劉武周、王世充、竇建德、杜伏威(招降)、梁師都都是被李世民擊敗的。

那么我們把李淵開國(guó)用Java代碼描述就是:

abstract class 李淵{
    abstract void 消滅薛舉父子();
    abstract void 消滅李軌();
    abstract void 消滅宋金剛();
    abstract void 消滅劉武周();
    abstract void 消滅王世充();
    abstract void 消滅竇建德();
    void 消滅蕭銑(){
        System.out.println("消滅了蕭銑");
    }
    abstract void 召降杜伏威();
    abstract void 消滅梁師都();
}

然后你可以看到,除了消滅蕭銑,我把其他方法都寫成了抽象方法,因?yàn)槲覀冎肋@些事都不是李淵自己直接做的。

那么李淵想建立唐朝的話,他只需要一個(gè)個(gè)調(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("李唐建立了");
    }
}

簡(jiǎn)單的來說就是這樣的。但是真的想開國(guó)的話,不能只有抽象方法啊,還必須一步一步的真正的實(shí)現(xiàn)上面的方法,這時(shí)候李世民就來了。李世民作為李淵的兒子,直接繼承父類就行了。

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("消滅梁師都");
    }
}

我們的李世民類實(shí)現(xiàn)了李淵沒有實(shí)現(xiàn)的方法。

然后我們來測(cè)試下建立唐朝

public class Test {
    public static void main(String[] args) {
        李淵 liYuan = new 李世民();
        liYuan.建立唐朝();
    }
}

李淵 liYuan = new 李世民();這個(gè)語(yǔ)句邏輯上看著有點(diǎn)怪異啊,不過意思就是這個(gè)意思吧。

作為父類的李淵,給出了統(tǒng)一天下的整體戰(zhàn)略,而具體實(shí)施的細(xì)節(jié)就是交給子類來,讓我們的代碼依賴于抽象而不是具體的實(shí)現(xiàn),這是軟件工程中的經(jīng)典做法。

假如另一個(gè)時(shí)空,沒有李世民,那么李淵也可以讓其他子女替他完成各個(gè)戰(zhàn)略,比如這樣的

class 平陽(yáng)公主 extends 李淵{
    @Override
    void 消滅薛舉父子() {
        System.out.println("平陽(yáng)公主了消滅薛舉父子");
    }
    // ...
}


public class Test {
    public static void main(String[] args) {
        李淵 liYuan = new 平陽(yáng)公主();
        liYuan.建立唐朝();
    }
}

模板方法的核心在于為了完成一件事情(比如建立唐朝),很有可能需要做大量的事情。

但是如果讓一個(gè)類包含實(shí)現(xiàn)這個(gè)目的所用到所有的細(xì)節(jié),會(huì)讓代碼很臃腫。我們把抽象和實(shí)現(xiàn)分離。李淵作為總指揮官,負(fù)責(zé)全局戰(zhàn)略上的全局調(diào)度,但是不負(fù)責(zé)細(xì)節(jié)的實(shí)現(xiàn)。而李世民則接受李淵的調(diào)遣,負(fù)責(zé)實(shí)現(xiàn)各個(gè)細(xì)節(jié)。

模板方法模式是抽象與實(shí)踐分離的又一個(gè)經(jīng)典實(shí)踐。

原文發(fā)布于github

https://github.com/fish-stack...

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/75444.html

相關(guān)文章

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

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

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

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

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

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

    molyzzx 評(píng)論0 收藏0
  • JavaScript > Juicer.js源碼解讀

    摘要:具體可配置的項(xiàng)可以參看其源代碼。那引擎對(duì)象是如何被構(gòu)造出來的呢看這句由此,我們進(jìn)入了的核心構(gòu)造函數(shù),。由于該構(gòu)造函數(shù)篇幅很長(zhǎng),我們先看下簡(jiǎn)略版的結(jié)構(gòu),然后拆開來分析。此外,推薦使用注冊(cè)自定義函數(shù),而非使用。 Juicer.js源碼解讀 Version: 0.6.9-stable Date: 8th of Aug, 2015 個(gè)人能力有限,如有分析不當(dāng)?shù)牡胤剑瑧┱?qǐng)指...

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

    摘要:分發(fā)處理器將會(huì)掃描使用了該注解的類的方法,并檢測(cè)該方法是否使用了注解。作用該注解用于將的方法返回的對(duì)象,通過適當(dāng)?shù)霓D(zhuǎn)換為指定格式后,寫入到對(duì)象的數(shù)據(jù)區(qū)。用于注解層,在類上面注解。使用標(biāo)記的參數(shù)。 1、@Controller 在SpringMVC 中,控制器Controller 負(fù)責(zé)處理由DispatcherServlet 分發(fā)的請(qǐng)求,它把用戶請(qǐng)求的數(shù)據(jù)經(jīng)過業(yè)務(wù)處理層處理之后封裝成一個(gè)M...

    notebin 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<