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

資訊專欄INFORMATION COLUMN

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

RebeccaZhong / 1488人閱讀

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

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

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

需求

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

思路 不同點

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

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

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

相同點

驗證會議是否沖突

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

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

特殊點

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

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

開始抽象

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

@Slf4j
public abstract class AbstarctRecurringHandler {

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

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

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

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

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

    public abstract void createEvent();
}
 

模板方法

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

鉤子方法

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

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

兩個子類唯一的職責(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)建本地會議
    }

}

第三方創(chuàng)建

@Slf4j
@Service
public class EwsRecurringHandler extends AbstarctRecurringHandler {

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

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

}
模板方法定義

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

角色

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

抽象模板角色

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

具體模板角色

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

總結(jié) 好處

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

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

具有一定的擴展性

不同的實現(xiàn)交由子類來自行實現(xiàn),用子類來進行擴展。

反向控制

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

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

往期文章一覽

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

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

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

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

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

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/74374.html

相關(guān)文章

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

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

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

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

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

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

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

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

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

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

    邱勇 評論0 收藏0

發(fā)表評論

0條評論

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