亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么使用java模板方法模式

發布時間:2021-11-17 11:10:37 來源:億速云 閱讀:142 作者:iii 欄目:大數據

本篇內容介紹了“怎么使用java模板方法模式”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

定義

模板方法模式(Template Method Pattern)- 定義一個操作中的算法的框架,而將一些步驟延遲到子類中。使得子類可以不改變一個算法的結構即可重定義該算法的某些特定步驟

簡單來說,就是把可變的部分(方法)放在子類中實現,把不可變的部分放在父類中實現

舉個例子,假如你賺錢了買了個房子,交房之后是個毛坯需要裝修,裝修的流程是水電、泥工、木工、再買家具電器等,這時關于裝修哪種風格有了不同意見,你自己喜歡簡約時尚的風格,而你爸媽喜歡中式風格,可不管是什么風格,整個裝修的流程還是不變的,于是可以找裝修公司制定兩種風格的方案,這其中變化的是兩種風格各個流程的具體材料、做工不同,不變的是裝修的流程

模板方法結構

通用類圖

怎么使用java模板方法模式

使用模板方法模式很簡單,使用Java的繼承機制即可,這里有兩種角色

  • 抽象模板(AbstractClass):提供模板方法,讓子類實現基本方法

    • 基本方法:

      基本方法也叫做基本操作,是由子類實現的方法,并且在模板方法被調用

    • 模板方法:

      可以有一個或幾個,一般是一個具體方法,也就是一個框架,實現對基本方法的調度,完成固定的邏輯

  • 具體模板(ConcreteClass):實現父類所定義的一個或多個抽象方法,也就是父類定義的基本方法在子類中得以實現

一般模板方法可以用final修飾,這樣子類不能重寫,避免被修改

優點以應用場景

優點

  • 封裝不變部分,擴展可變部分。把認為是不變部分的算法封裝到父類實現,而可變部分的則可以通過繼承來繼續擴展

  • 提取公共部分代碼,便于維護

  • 行為由父類控制,子類實現。子類可以通過擴展的方式增加相應的功能,符合開閉原則

應用場景

  • 多個子類有公有的方法,并且邏輯基本相同時

  • 重要、復雜的算法,可以把核心算法設計為模板方法,周邊的相關細節功能則由各個子類實現

  • 重構時,模板方法模式是一個經常使用的模式,把相同的代碼抽取到父類中,然后通過鉤子函數約束其行為

實例

統計操作時間

抽象模板,用于給操作統計時間,其中getTime()為模板方法,用于統計操作時間,該行為交給父類控制,code()鉤子方法延遲到子類中實現

public abstract class GetTimeTemplate {

    /**
     * 基本方法,由子類實現 (鉤子方法)
     */
    public abstract void code();

    /**
     * 模板方法 固定流程方法
     */
    public long getTime() {
        // 獲取起始時間
        long t1 = System.currentTimeMillis();

        // 調用基本方法
        code();

        // 獲取結束時間
        long t2 = System.currentTimeMillis();
        return t2 - t1;
    }
}

具體模板實現 - 統計復制文件操作時間

public class CopyFileDemo extends GetTimeTemplate {
    @Override
    public void code() {
        //復制文件
        try {
            BufferedInputStream inputStream = new BufferedInputStream(new FileInputStream("1.jpg"));

            BufferedOutputStream outputStream = new BufferedOutputStream(new FileOutputStream("2.jpg"));

            byte[] bs = new byte[256];
            int len = 0;

            while ((len = inputStream.read(bs)) != -1) {
                outputStream.write(bs, 0, len);
                outputStream.flush();
            }
            //釋放資源
            inputStream.close();
            outputStream.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

具體模板實現 - 統計循環操作時間

public class ForDemo extends GetTimeTemplate {
    @Override
    public void code() {
        //輸出for循環
        for (int i = 0; i < 10000; i++) {
            System.out.println(i);
        }
    }
}

“怎么使用java模板方法模式”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

天全县| 普兰店市| 温州市| 溆浦县| 乌恰县| 乌拉特中旗| 泌阳县| 夏邑县| 滁州市| 黑山县| 吉木萨尔县| 南投县| 巫山县| 辽阳县| 彭阳县| 韶关市| 新竹市| 万山特区| 石台县| 青神县| 伊金霍洛旗| 双桥区| 大化| 兴隆县| 静乐县| 喀喇沁旗| 宁远县| 高要市| 红原县| 湘乡市| 会同县| 新巴尔虎左旗| 阜阳市| 五大连池市| 咸宁市| 邵武市| 平泉县| 南宁市| 搜索| 保靖县| 丘北县|