国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

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

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

背景

有5類數據A、B、C、D、E,需要分別進行處理。

優化前

通過ParamBuilder來分別構造各自參數,然后在Runner中分別調用,分別判斷。

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;

@Data
public 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中存在較多重復代碼。

優化方法

模板方法模式,Template Method Pattern。將重復代碼抽象為一個抽象類,定義多個子類繼承并實現各自代碼。

優化后

AbstractHandler抽象了重復方法,子類繼承后實現build()方法。Runner中調用process()方法來遍歷子類對象進行處理。

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是動態語言,有鴨子類型,對于重復代碼通過定義一個公共函數,動態綁定類型就能解決,感興趣的同學可以試試。不同的語言都各自的優勢,也有各自的限制。也有各自的解決方法。

責任編輯:武曉燕 來源: 測試開發剛哥
相關推薦

2015-11-27 18:32:02

Dex優化分包方案

2017-07-25 09:24:27

前端MVC

2022-10-27 09:04:07

wepyuniapp開發

2023-04-20 07:18:56

CTO驅動力

2012-10-16 16:32:14

2025-10-30 02:45:00

數據架構ODS

2017-11-29 09:34:03

MVP蘇寧移動

2019-05-13 16:08:30

蘋果iMessage垃圾短信

2012-07-11 08:51:51

設計模式

2015-10-13 10:54:15

中關村創業電子賣場

2013-12-17 17:23:06

2025-03-20 08:34:46

2015-09-10 13:35:45

云海大數據一體機

2023-12-12 11:09:55

模板方法模式python設計模式

2013-11-26 17:15:13

Android設計模式

2022-07-04 07:37:51

模板模式重構

2023-05-15 08:38:58

模板方法模式

2021-06-16 08:56:06

模版方法模式設計模式行為型設計模式

2020-09-23 06:52:49

代碼方法模式
點贊
收藏

51CTO技術棧公眾號

亚洲成人动漫在线| 91青青草免费观看| 成年在线电影| 石原莉奈在线亚洲二区| 欧美在线一级va免费观看| 国产中文字幕第一页| 国产精品成人国产| 亚洲美女淫视频| 日本久久久久久| baoyu777.永久免费视频| 亚洲精品按摩视频| 亚洲精品无码国产| 国精产品一区一区三区mba视频| 国产精品久久久久久久久久直播| 欧美日韩国产在线观看网站 | 成人软件在线观看| 亚洲精品一区二区三区香蕉| 黄色网页在线看| 欧美日本免费一区二区三区| 国产精品99999| 在线精品视频免费观看| 国产一二三区在线视频| 欧洲日韩一区二区三区| 高清av在线| 91精品久久久久久久99蜜桃 | 亚洲日本在线a| av在线dvd| 欧美日韩在线视频一区二区| 国产高清在线| 欧美一级夜夜爽| 三上悠亚一区二区| 欧美国产日韩中文字幕在线| 先锋影音国产精品| 亚洲va久久久噜噜噜| 国产精品普通话对白| 一区二区视频在线观看| av日韩在线网站| 成人黄动漫网站| 欧美性生交片4| 极品美鲍一区| 欧美大片网站在线观看| 97视频一区| 91精品啪aⅴ在线观看国产| 亚洲精品国产日韩| 国产在线视频在线| 亚洲色图一区二区| 久操免费在线| 播播国产欧美激情| 国产成人调教视频在线观看 | 亚洲欧洲精品一区二区精品久久久| 成人影院一区二区三区| 色噜噜夜夜夜综合网| free性m.freesex欧美| 久久精品久久久久久国产 免费| 99re8这里有精品热视频免费| 欧美一级淫片aaaaaaa视频| 香蕉精品视频在线观看| 视频一区不卡| 国产精品福利影院| 五月天激情在线| 久久久久国产精品www| 国一区二区在线观看| 国产精品视频网站在线观看 | 毛葺葺老太做受视频| 狠狠色狠色综合曰曰| 久久美女艺术照精彩视频福利播放| 我看黄色一级片| 日韩欧美中文在线| 欧美一级大黄| 国产成人精品一区二区在线| 久久精品综合| 国产色视频在线播放| 欧美一区二区三区性视频| 国产精品免费精品自在线观看 | 日韩av一级大片| av一区二区不卡| 精品久久av| www日韩中文字幕在线看| 99久久夜色精品国产亚洲1000部| 一区二区视频在线免费| 亚洲午夜影视影院在线观看| 多野结衣av一区| 国产精品最新在线观看| 成人av电影免费在线播放| 青青草免费在线| 欧美国产日韩二区| 日韩在线卡一卡二| 午夜在线不卡| 久久精品人人做人人爽| 老鸭窝亚洲一区二区三区| 黄色av观看| 久久伊人精品天天| 免费成人在线网站| 国产污视频在线| 69影院欧美专区视频| 国产精品资源在线观看| av中文字幕在线| 国产91精品久久久久久久| 国内精品免费在线观看| eeuss影院www在线观看| 国产精品91免费在线| 26uuu精品一区二区在线观看| 蜜臀av在线| 91在线观看网站| 亚洲免费毛片网站| 曰本一区二区| 伊人情人网综合| 在线视频国内一区二区| 国产亚洲一区二区三区不卡| 18禁免费无码无遮挡不卡网站| 亚洲国产欧美一区| 亚洲综合不卡| 日韩美女一级视频| 国产精品入口免费视| 久久婷婷国产综合精品青草| 亚洲一区站长工具| 日韩av电影免费播放| 欧美无砖砖区免费| 外国成人激情视频| 在线看三级网站视频| 欧美一区二区三区……| 国产精品久久午夜| 国产三级精品三级在线观看国产| 黄色www网站| 在线观看久久久久久| 美女网站一区二区| 国产天堂在线播放视频| 色姑娘综合av| 日韩一区二区免费视频| 国产精品毛片在线看| 免费a级在线播放| 国产精品免费一区二区三区四区| 色综合网色综合| 国产在线欧美| 92国产在线视频| 久久精品国产综合精品| 3atv一区二区三区| 日本在线不卡视频| 色吧亚洲日本| 日本a视频在线观看| 欧美成人激情在线| 久久久www成人免费毛片麻豆 | 国产精品久久久久一区二区三区厕所| jizz18女人| 欧美一级淫片播放口| 日韩毛片一二三区| 精品国产乱码久久久| 中文字字幕在线中文乱码电影| 国产情人节一区| 欧美日韩免费高清一区色橹橹| 亚洲精品欧美| heyzo中文字幕在线| 国产一区二区片| 久久99热精品| 亚洲一卡二卡三卡四卡无卡久久| 97精品在线| bt在线麻豆视频| 成人在线免费高清视频| 久久精品视频在线| 国产精品狼人久久影院观看方式| 怕怕欧美视频免费大全| 亚洲字幕成人中文在线观看| 久久99精品久久久久子伦| 亚洲毛片在线看| 亚洲人成在线播放网站岛国| 欧美.www| 日韩在线影院| 色琪琪丁香婷婷综合久久| 丁香婷婷久久久综合精品国产| 亚洲国产精品va在线观看黑人| 91在线你懂得| 91久久夜色精品国产按摩| 99热国产在线| 成熟老妇女视频| 成人情趣片在线观看免费| 日韩欧美国产不卡| 国产网站一区二区| 国产精品jizz在线观看美国| 天堂网在线最新版www中文网| 日本加勒比高清在线| 国产成人一区二区三区免费看| 亚洲人高潮女人毛茸茸| 亚洲精品亚洲人成人网在线播放| 先锋影音国产一区| caoporn成人| 国产网友自拍视频导航网站在线观看| av免费看网址| 国产精品视频大全| 日韩精品中文字幕视频在线| 综合婷婷亚洲小说| 免费成人av在线| 欧美裸体在线版观看完整版| 爱看av在线| 8×8x拔擦拔擦在线视频网站| 亚洲欧美日韩精品在线| 久久久久国产精品一区| 欧美一区二区三区日韩视频| 亚洲欧美在线高清| 国产精品91xxx| 中文字幕一区二区三区久久网站|