AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

當前位置:首頁 > 科技  > 軟件

代碼變形記之模板方法模式

來源: 責編: 時間:2023-10-27 09:14:52 278觀看
導讀背景有5類數據A、B、C、D、E,需要分別進行處理。優化前通過ParamBuilder來分別構造各自參數,然后在Runner中分別調用,分別判斷。package TemplateMethodPattern.before;public class Runner { public static void mai

背景

有5類數據A、B、C、D、E,需要分別進行處理。eov28資訊網——每日最新資訊28at.com

優化前

通過ParamBuilder來分別構造各自參數,然后在Runner中分別調用,分別判斷。eov28資訊網——每日最新資訊28at.com

package TemplateMethodPattern.before;public class Runner {    public static void main(String[] args) {        Param param = new Param();        ParamBuilder paramBuilder = new ParamBuilder();        // 處理數據A        boolean result = paramBuilder.buildA(param);        if (!result) {            return;        }        boolean inserted = doIt(param);        if (!inserted) {            return;        }        // 處理數據B        result = paramBuilder.buildB(param);        if (!result) {            return;        }        inserted = doIt(param);        if (!inserted) {            return;        }        // 處理數據C        result = paramBuilder.buildC(param);        if (!result) {            return;        }        inserted = doIt(param);        if (!inserted) {            return;        }        // 處理數據D        result = paramBuilder.buildD(param);        if (!result) {            return;        }        inserted = doIt(param);        if (!inserted) {            return;        }        // 處理數據E        result = paramBuilder.buildE(param);        if (!result) {            return;        }        inserted = doIt(param);        if (!inserted) {            return;        }    }    public static boolean doIt(Param param) {        return param.flag;    }}
package TemplateMethodPattern.before;import lombok.Data;@Datapublic class Param {    public boolean flag;}
package TemplateMethodPattern.before;public class ParamBuilder {    public boolean buildA(Param param) {        return true;    }    public boolean buildB(Param param) {        return false;    }    public boolean buildC(Param param) {        return true;    }    public boolean buildD(Param param) {        return false;    }    public boolean buildE(Param param) {        return true;    }}

存在問題

Runner中存在較多重復代碼。eov28資訊網——每日最新資訊28at.com

優化方法

模板方法模式,Template Method Pattern。將重復代碼抽象為一個抽象類,定義多個子類繼承并實現各自代碼。eov28資訊網——每日最新資訊28at.com

優化后

AbstractHandler抽象了重復方法,子類繼承后實現build()方法。Runner中調用process()方法來遍歷子類對象進行處理。eov28資訊網——每日最新資訊28at.com

package TemplateMethodPattern.after;import TemplateMethodPattern.after.handler.*;import TemplateMethodPattern.before.Param;import java.util.Arrays;import java.util.List;public class Runner {    public static void main(String[] args) {        Param param = new Param();        List<AbstractHandler> handlers = Arrays.asList(                new AHandler(),                new BHandler(),                new CHandler(),                new DHandler(),                new EHandler()        );        for (AbstractHandler handler : handlers) {            if (!handler.process(param, Runner::doIt)) {                return;            }        }    }    public static boolean doIt(Param param) {        return param.flag;    }}
package TemplateMethodPattern.after.handler;import TemplateMethodPattern.before.Param;import java.util.function.Function;public abstract class AbstractHandler {    protected abstract boolean build(Param param);    public boolean process(Param param, Function<Param, Boolean> doIt) {        boolean result = build(param);        if (!result) {            return false;        }        return doIt.apply(param);    }}
package TemplateMethodPattern.after.handler;import TemplateMethodPattern.before.Param;public class AHandler extends AbstractHandler{    @Override    protected boolean build(Param param) {        return true;    }}
package TemplateMethodPattern.after.handler;import TemplateMethodPattern.before.Param;public class BHandler extends AbstractHandler{    @Override    protected boolean build(Param param) {        return false;    }}
package TemplateMethodPattern.after.handler;import TemplateMethodPattern.before.Param;public class CHandler extends AbstractHandler{    @Override    protected boolean build(Param param) {        return true;    }}
package TemplateMethodPattern.after.handler;import TemplateMethodPattern.before.Param;public class DHandler extends AbstractHandler{    @Override    protected boolean build(Param param) {        return false;    }}
package TemplateMethodPattern.after.handler;import TemplateMethodPattern.before.Param;public class EHandler extends AbstractHandler{    @Override    protected boolean build(Param param) {        return true;    }}

個人感想,因為我是從Python轉到Java,在使用設計模式解決這個問題后,我也思考了如果使用Python該怎么處理?Python是動態語言,有鴨子類型,對于重復代碼通過定義一個公共函數,動態綁定類型就能解決,感興趣的同學可以試試。不同的語言都各自的優勢,也有各自的限制。也有各自的解決方法。eov28資訊網——每日最新資訊28at.com

本文鏈接:http://www.tebozhan.com/showinfo-26-15317-0.html代碼變形記之模板方法模式

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: Python字典全解析:從基礎到高級應用

下一篇: Go的元編程:代碼生成與AST操作

標簽:
  • 熱門焦點
  • 直屏旗艦來了 iQOO 12和K70 Pro同臺競技

    旗艦機基本上使用的都是雙曲面屏幕,這就讓很多喜歡直屏的愛好者在苦等一款直屏旗艦,這次,你們等到了。據博主數碼閑聊站帶來的最新爆料稱,Redmi下代旗艦K70 Pro和iQOO 12兩款手
  • 一年經驗在二線城市面試后端的經驗分享

    忠告這篇文章只適合2年內工作經驗、甚至沒有工作經驗的朋友閱讀。如果你是2年以上工作經驗,請果斷劃走,對你沒啥幫助~主人公這篇文章內容來自 「升職加薪」星球星友 的投稿,坐
  • 如何使用JavaScript創建一只圖像放大鏡?

    譯者 | 布加迪審校 | 重樓如果您曾經瀏覽過購物網站,可能遇到過圖像放大功能。它可以讓您放大圖像的特定區域,以便瀏覽。結合這個小小的重要功能可以大大改善您網站的用戶體驗
  • 小紅書1周漲粉49W+,我總結了小白可以用的N條漲粉筆記

    作者:黃河懂運營一條性教育視頻,被54萬人&ldquo;珍藏&rdquo;是什么體驗?最近,情感博主@公主是用鮮花做的,火了!僅僅憑借一條視頻,光小紅書就有超過128萬人,為她瘋狂點贊!更瘋狂的是,這
  • 重估百度丨大模型,能撐起百度的“今天”嗎?

    自象限原創 作者|程心 羅輯2023年之前,對于自己的&ldquo;今天&rdquo;,百度也很迷茫。&ldquo;新業務到 2022 年底還是 0,希望 2023 年出來一個 1。&rdquo;這是2022年底,李彥宏
  • 造車兩年股價跌六成,小米的估值邏輯變了嗎?

    如果從小米官宣造車后的首個交易日起持有小米集團的股票,那么截至2023年上半年最后一個交易日,投資者將浮虧59.16%,同區間的恒生科技指數跌幅為52.78%
  • SN570 NVMe SSD固態硬盤 價格與性能兼具

    SN570 NVMe SSD固態硬盤是西部數據發布的最新一代WD Blue系列的固態硬盤,不僅閃存技術更為精進,性能也得到了進一步的躍升。WD Blue SN570 NVMe SSD的包裝外
  • 電博會與軟博會實現"線下+云端"的雙線融合

    在本次“電博會”與“軟博會”雙展會利好條件的加持下,既可以發揮展會拉動人流、信息流、資金流實現快速交互流動的作用,繼而推動區域經濟良性發展;又可以聚
  • 北京:科技教育體驗基地開始登記

      北京“科技館之城”科技教育體驗基地登記和認證工作日前啟動。首批北京科技教育體驗基地擬于2023年全國科普日期間掛牌,后續還將開展常態化登記。  北京科技教育體驗基
Top