成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

把「模板方法」應(yīng)用到實(shí)際項(xiàng)目中

RebeccaZhong / 1490人閱讀

摘要:閱讀原文把模板方法應(yīng)用到實(shí)際項(xiàng)目中如果不在工作中思考,模板方法模式的概念和定義即使背再多遍估計(jì)也是徒勞,今天我思考如何解決實(shí)際項(xiàng)目中的問題時(shí)發(fā)現(xiàn),模板方法正是解決問題的良策。

閱讀原文:把「模板方法」應(yīng)用到實(shí)際項(xiàng)目中

如果不在工作中思考,模板方法模式的概念和定義即使背再多遍估計(jì)也是徒勞,今天我思考如何解決實(shí)際項(xiàng)目中的問題時(shí)發(fā)現(xiàn),模板方法正是解決問題的良策。

需求

我們項(xiàng)目中要實(shí)現(xiàn)一個(gè)創(chuàng)建會(huì)議的需求,但我們系統(tǒng)可設(shè)置將會(huì)議同步到其他第三方系統(tǒng)中。而在創(chuàng)建會(huì)議前要經(jīng)過幾個(gè)必須的步驟,比如驗(yàn)證沖突,計(jì)算循環(huán)規(guī)則,對(duì)比時(shí)間段是否符合等。

思路 不同點(diǎn)

創(chuàng)建會(huì)議的方式不同:

本地系統(tǒng)創(chuàng)建

第三方系統(tǒng)創(chuàng)建

相同點(diǎn)

驗(yàn)證會(huì)議是否沖突

根據(jù)循環(huán)規(guī)則計(jì)算出預(yù)定時(shí)間段

是否符合預(yù)定規(guī)則

特殊點(diǎn)

即使會(huì)議又沖突,但有需求是依然要能創(chuàng)建成功!所以驗(yàn)證沖突步驟是可選的。

業(yè)務(wù)梳理后如下:

開始抽象

只有抽象類能實(shí)現(xiàn)我們的要求,既能要一部分方法有實(shí)現(xiàn)又能實(shí)現(xiàn)抽象方法不用實(shí)現(xiàn)。

@Slf4j
public abstract class AbstarctRecurringHandler {

    /**
     * 處理創(chuàng)建會(huì)議
     */
    public final void handle() {
        if (isConfirm()) {
            calculateConflict();
        }
        calcBookingPeriod();
        checkRule();
        createEvent();
    }

    /**
     * 驗(yàn)證規(guī)則
     */
    public void checkRule() {}

    /**
     * 獲取預(yù)定的所有會(huì)議時(shí)間段
     *
     * @return
     */
    public List calcBookingPeriod() {}

    /**
     * 計(jì)算沖突會(huì)議
     */
    public void calculateConflict() {}

    /**
     * 鉤子方法
     *
     * @return
     */
    public abstract boolean isConfirm();

    public abstract void createEvent();
}
 

模板方法

我們這里的handle方法已經(jīng)固定了整個(gè)創(chuàng)建會(huì)議的流程,并且我們使用final修飾,表示不允許別人修改這個(gè)過程。
不同的創(chuàng)建可能有不同的人來完成,這個(gè)能夠避免部分人員的粗心大意也就是規(guī)范了創(chuàng)建流程,而且其他開發(fā)人員也不必再關(guān)心除創(chuàng)建會(huì)議之外的其他過程。

鉤子方法

雖然我們的創(chuàng)建會(huì)議的整體過程不允許修改,但部分功能可能有所不同,所以我們需要鉤子方法來使部分功能可選或者改變部分流程。鉤子方法可使用默認(rèn)值,也可由子類來決定是否改變。

兩種不同的實(shí)現(xiàn)

兩個(gè)子類唯一的職責(zé)就只剩單純的創(chuàng)建功能。

本地創(chuàng)建

@Slf4j
@Service
public class LocalRecurringHandler extends AbstarctRecurringHandler {

    /**
     * 鉤子方法
     *
     * @return
     */
    @Override
    public boolean isConfirm() {
        return true;
    }

    @Override
    public void createEvent() {
        //創(chuàng)建本地會(huì)議
    }

}

第三方創(chuàng)建

@Slf4j
@Service
public class EwsRecurringHandler extends AbstarctRecurringHandler {

    /**
     * 鉤子方法
     *
     * @return
     */
    @Override
    public boolean isConfirm() {
        return false;
    }

    @Override
    public void createEvent() {
        //創(chuàng)建本地會(huì)議
    }

}
模板方法定義

定義一個(gè)操作中的算法的骨架,而將一些步驟延遲到子類中。模板方法使得子類可以不改變一個(gè)算法的結(jié)構(gòu)即可重定義該算法的某些特定步驟。

角色

模板方法模式涉及到的角色有:

抽象模板角色

定義一組基本方法供子類實(shí)現(xiàn),定義并實(shí)現(xiàn)組合了基本方法的模板方法。

具體模板角色

實(shí)現(xiàn)抽象模板角色定義的基本方法。

總結(jié) 好處

提高代碼的復(fù)用性

相同的代碼放到了抽象類中,復(fù)用且可維護(hù)性強(qiáng)。

具有一定的擴(kuò)展性

不同的實(shí)現(xiàn)交由子類來自行實(shí)現(xiàn),用子類來進(jìn)行擴(kuò)展。

反向控制

行為由父類控制,子類實(shí)現(xiàn)。

實(shí)踐要在理論的基礎(chǔ)之上,所以理論基礎(chǔ)也是非常重要的。

往期文章一覽

把「策略模式」應(yīng)用到實(shí)際項(xiàng)目中

造個(gè)輪子,我學(xué)到了什么

技術(shù)面試中的軟技能

關(guān)注 「碼上實(shí)戰(zhàn)」 回復(fù) :面試視頻 和 架構(gòu)師 送你非常不錯(cuò)的資料。

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

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

相關(guān)文章

  • webpack多頁應(yīng)用架構(gòu)系列(十三):構(gòu)建一個(gè)簡(jiǎn)單的模板布局系統(tǒng)

    摘要:原文地址如果您對(duì)本系列文章感興趣,歡迎關(guān)注訂閱這里前言上文多頁應(yīng)用架構(gòu)系列十二利用生成普通網(wǎng)頁頁面模板我們基本上已經(jīng)搞清楚如何利用來生成普通網(wǎng)頁頁面模板,本文將以我的腳手架項(xiàng)目介紹如何在這基礎(chǔ)上搭建一套簡(jiǎn)單的模板布局系統(tǒng)。 本文首發(fā)于Array_Huang的技術(shù)博客——實(shí)用至上,非經(jīng)作者同意,請(qǐng)勿轉(zhuǎn)載。原文地址:https://segmentfault.com/a/1190000007...

    yedf 評(píng)論0 收藏0
  • Django 博客開發(fā)教程 6 - 真正的 Django 博客首頁視圖

    摘要:在此之前我們已經(jīng)編寫了的首頁視圖,并且配置了和模板,讓能夠正確地處理請(qǐng)求并返回合適的響應(yīng)。正確引入了靜態(tài)文件后樣式顯示正常了。在真正的博客首頁視圖追夢(mèng)人物的博客的評(píng)論區(qū)留言。更多教程,請(qǐng)?jiān)L問追夢(mèng)人物的博客。 在此之前我們已經(jīng)編寫了 Blog 的首頁視圖,并且配置了 URL 和模板,讓 Django 能夠正確地處理 HTTP 請(qǐng)求并返回合適的 HTTP 響應(yīng)。不過我們僅僅在首頁返回了一句...

    yzzz 評(píng)論0 收藏0
  • webpack多頁應(yīng)用架構(gòu)系列(十五):論前端如何在后端渲染開發(fā)模式下夾縫生存

    摘要:回到純靜態(tài)頁面開發(fā)階段,讓頁面不需要后端渲染也能跑起來。改造開始本文著重介紹如何將靜態(tài)頁面改造成后端渲染需要的模板??偨Y(jié)在后端渲染的項(xiàng)目里使用多頁應(yīng)用架構(gòu)是絕對(duì)可行的,可不要給老頑固們嚇唬得又回到傳統(tǒng)前端架構(gòu)了。 本文首發(fā)于Array_Huang的技術(shù)博客——實(shí)用至上,非經(jīng)作者同意,請(qǐng)勿轉(zhuǎn)載。原文地址:https://segmentfault.com/a/119000000820338...

    dinfer 評(píng)論0 收藏0
  • webpack多頁應(yīng)用架構(gòu)系列(十五):論前端如何在后端渲染開發(fā)模式下夾縫生存

    摘要:回到純靜態(tài)頁面開發(fā)階段,讓頁面不需要后端渲染也能跑起來。改造開始本文著重介紹如何將靜態(tài)頁面改造成后端渲染需要的模板??偨Y(jié)在后端渲染的項(xiàng)目里使用多頁應(yīng)用架構(gòu)是絕對(duì)可行的,可不要給老頑固們嚇唬得又回到傳統(tǒng)前端架構(gòu)了。 本文首發(fā)于Array_Huang的技術(shù)博客——實(shí)用至上,非經(jīng)作者同意,請(qǐng)勿轉(zhuǎn)載。原文地址:https://segmentfault.com/a/119000000820338...

    dingda 評(píng)論0 收藏0
  • Lunar, 一個(gè)Python網(wǎng)絡(luò)框架的實(shí)現(xiàn)

    摘要:核心的幾個(gè)組件模板引擎,框架,請(qǐng)求和應(yīng)答的處理還是有一些難度,但是經(jīng)過一步步的分析和編碼還是能夠完成功能。模板引擎模板引擎是另外一個(gè)比較大和的模塊。 前前后后,大概兩個(gè)月的時(shí)間,lunar這個(gè)項(xiàng)目終于達(dá)到了一個(gè)很高的完整度。 Lunar是一個(gè)Python語言的網(wǎng)絡(luò)框架,類似于Django,F(xiàn)lask,Tornado等當(dāng)下流行的web framework。最初有這個(gè)想法是在大二下學(xué)期,...

    邱勇 評(píng)論0 收藏0

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

0條評(píng)論

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