一天一個設計模式---模板方法模式__設計模式

來源:互聯網
上載者:User

介紹:定義一個操作中的演算法骨架,將一些步驟延遲到子類中。準備一個抽模板,實現部分邏輯,再聲明一些對於子類需要不同實現的公用抽象方法。

情境:對於多個業務,它們的業務中有很多功能是相似的,有部分功能需要獨自實現。這樣我們就可以使用模板方法模式,將功能打散,抽取出更小的功能塊,減小重複代碼。 一、角色和作用

角色 作用
抽象模板 定義子類需要實現的不同功能塊,以及子類共用的功能塊
具體模板 實現各自不同的功能塊
二、沖泡熱飲

在泡咖啡和泡檸檬綠茶的時候,它們有部分功能是相同的-燒水,倒入杯子。而加的主料和調料是不同的。

熱飲

有一個子類無法覆蓋的方法prepareRecipe(),用於沖泡飲料的功能

public abstract class Beverage {    final void prepareRecipe() {        // final 表示希望子類不能覆蓋此方法        boilWater();        brew();        pourInCup();        addCondiments();    }    // 沖泡內容和添加的配料都由子類來實現    abstract void brew();    abstract void addCondiments();    private void pourInCup() {        System.out.println("將熱飲倒入杯子");    }    private void boilWater() {        System.out.println("燒水");    }}

咖啡

// 咖啡的沖泡public class Coffee extends Beverage {    @Override    void brew() {        System.out.println("添加咖啡");    }    @Override    void addCondiments() {        System.out.println("添加方糖");    }}

檸檬綠茶

// 檸檬綠茶沖泡public class Tea extends Beverage {    @Override    protected void brew() {        System.out.println("放入茶葉");    }    @Override    protected void addCondiments() {        System.out.println("加入檸檬片");    }}

沖泡飲料

    public static void main(String[] args) {        System.out.println("泡咖啡");        Beverage coffee = new Coffee();        coffee.prepareRecipe();        System.out.println("泡檸檬綠茶");        Beverage tea = new Tea();        tea.prepareRecipe();    }

輸出

泡咖啡燒水添加咖啡將熱飲倒入杯子添加方糖泡檸檬綠茶燒水放入茶葉將熱飲倒入杯子加入檸檬片

更多模式: 一天一個設計模式—分類與六大原則

更多源碼: https://github.com/oDevilo/Java-Base

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.