摘要:閱讀原文把模板方法應用到實際項目中如果不在工作中思考,模板方法模式的概念和定義即使背再多遍估計也是徒勞,今天我思考如何解決實際項目中的問題時發現,模板方法正是解決問題的良策。
閱讀原文:把「模板方法」應用到實際項目中
如果不在工作中思考,模板方法模式的概念和定義即使背再多遍估計也是徒勞,今天我思考如何解決實際項目中的問題時發現,模板方法正是解決問題的良策。
需求我們項目中要實現一個創建會議的需求,但我們系統可設置將會議同步到其他第三方系統中。而在創建會議前要經過幾個必須的步驟,比如驗證沖突,計算循環規則,對比時間段是否符合等。
思路 不同點創建會議的方式不同:
本地系統創建
第三方系統創建
相同點驗證會議是否沖突
根據循環規則計算出預定時間段
是否符合預定規則
特殊點即使會議又沖突,但有需求是依然要能創建成功!所以驗證沖突步驟是可選的。
業務梳理后如下:
開始抽象只有抽象類能實現我們的要求,既能要一部分方法有實現又能實現抽象方法不用實現。
@Slf4j public abstract class AbstarctRecurringHandler { /** * 處理創建會議 */ public final void handle() { if (isConfirm()) { calculateConflict(); } calcBookingPeriod(); checkRule(); createEvent(); } /** * 驗證規則 */ public void checkRule() {} /** * 獲取預定的所有會議時間段 * * @return */ public ListcalcBookingPeriod() {} /** * 計算沖突會議 */ public void calculateConflict() {} /** * 鉤子方法 * * @return */ public abstract boolean isConfirm(); public abstract void createEvent(); }
模板方法
我們這里的handle方法已經固定了整個創建會議的流程,并且我們使用final修飾,表示不允許別人修改這個過程。
不同的創建可能有不同的人來完成,這個能夠避免部分人員的粗心大意也就是規范了創建流程,而且其他開發人員也不必再關心除創建會議之外的其他過程。
鉤子方法
雖然我們的創建會議的整體過程不允許修改,但部分功能可能有所不同,所以我們需要鉤子方法來使部分功能可選或者改變部分流程。鉤子方法可使用默認值,也可由子類來決定是否改變。
兩種不同的實現兩個子類唯一的職責就只剩單純的創建功能。
本地創建
@Slf4j @Service public class LocalRecurringHandler extends AbstarctRecurringHandler { /** * 鉤子方法 * * @return */ @Override public boolean isConfirm() { return true; } @Override public void createEvent() { //創建本地會議 } }
第三方創建
@Slf4j @Service public class EwsRecurringHandler extends AbstarctRecurringHandler { /** * 鉤子方法 * * @return */ @Override public boolean isConfirm() { return false; } @Override public void createEvent() { //創建本地會議 } }模板方法定義
定義一個操作中的算法的骨架,而將一些步驟延遲到子類中。模板方法使得子類可以不改變一個算法的結構即可重定義該算法的某些特定步驟。
角色模板方法模式涉及到的角色有:
抽象模板角色
定義一組基本方法供子類實現,定義并實現組合了基本方法的模板方法。
具體模板角色
實現抽象模板角色定義的基本方法。
總結 好處提高代碼的復用性
相同的代碼放到了抽象類中,復用且可維護性強。
具有一定的擴展性
不同的實現交由子類來自行實現,用子類來進行擴展。
反向控制
行為由父類控制,子類實現。
實踐要在理論的基礎之上,所以理論基礎也是非常重要的。
往期文章一覽把「策略模式」應用到實際項目中
造個輪子,我學到了什么
技術面試中的軟技能
關注 「碼上實戰」 回復 :面試視頻 和 架構師 送你非常不錯的資料。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/74374.html
摘要:原文地址如果您對本系列文章感興趣,歡迎關注訂閱這里前言上文多頁應用架構系列十二利用生成普通網頁頁面模板我們基本上已經搞清楚如何利用來生成普通網頁頁面模板,本文將以我的腳手架項目介紹如何在這基礎上搭建一套簡單的模板布局系統。 本文首發于Array_Huang的技術博客——實用至上,非經作者同意,請勿轉載。原文地址:https://segmentfault.com/a/1190000007...
摘要:在此之前我們已經編寫了的首頁視圖,并且配置了和模板,讓能夠正確地處理請求并返回合適的響應。正確引入了靜態文件后樣式顯示正常了。在真正的博客首頁視圖追夢人物的博客的評論區留言。更多教程,請訪問追夢人物的博客。 在此之前我們已經編寫了 Blog 的首頁視圖,并且配置了 URL 和模板,讓 Django 能夠正確地處理 HTTP 請求并返回合適的 HTTP 響應。不過我們僅僅在首頁返回了一句...
摘要:回到純靜態頁面開發階段,讓頁面不需要后端渲染也能跑起來。改造開始本文著重介紹如何將靜態頁面改造成后端渲染需要的模板。總結在后端渲染的項目里使用多頁應用架構是絕對可行的,可不要給老頑固們嚇唬得又回到傳統前端架構了。 本文首發于Array_Huang的技術博客——實用至上,非經作者同意,請勿轉載。原文地址:https://segmentfault.com/a/119000000820338...
摘要:回到純靜態頁面開發階段,讓頁面不需要后端渲染也能跑起來。改造開始本文著重介紹如何將靜態頁面改造成后端渲染需要的模板。總結在后端渲染的項目里使用多頁應用架構是絕對可行的,可不要給老頑固們嚇唬得又回到傳統前端架構了。 本文首發于Array_Huang的技術博客——實用至上,非經作者同意,請勿轉載。原文地址:https://segmentfault.com/a/119000000820338...
摘要:核心的幾個組件模板引擎,框架,請求和應答的處理還是有一些難度,但是經過一步步的分析和編碼還是能夠完成功能。模板引擎模板引擎是另外一個比較大和的模塊。 前前后后,大概兩個月的時間,lunar這個項目終于達到了一個很高的完整度。 Lunar是一個Python語言的網絡框架,類似于Django,Flask,Tornado等當下流行的web framework。最初有這個想法是在大二下學期,...
閱讀 3259·2021-11-15 11:37
閱讀 1065·2021-11-02 14:45
閱讀 3893·2021-09-04 16:48
閱讀 3569·2019-08-30 15:55
閱讀 748·2019-08-23 17:53
閱讀 994·2019-08-23 17:03
閱讀 2020·2019-08-23 16:43
閱讀 2183·2019-08-23 16:22