设计模式之模板方法模式(java)

其实有些设计模式在潜移默化的编码当中你是已经掌握的了,只不过你没系统的去学习设计模式之前你不知道它统一的名称叫什么,统一概念和名词的好处就是减少沟通的成本,并能过滤掉一些小白。

模板方法模式说起来非常简单,本身概念也很容易掌握,就是把通用的代码部分封装好一个模板,方便之后重复利用。

这里还是引用head first中的例子,coffee和tea的制作过程分别是:

coffee
(1)把水煮沸
(2)用沸水冲泡咖啡
(3)把咖啡倒进杯子
(4)加糖和牛奶

tea
(1)把水煮沸
(2)用沸水侵泡茶叶
(3)把茶倒进杯子
(4)加柠檬

代码是这样实现的:

public class Coffee {

    void prepareRecipe() {
        boilWater();
        brewCoffeeGrinds();
        pourCup();
        addSugarAndMilk();
    }

    private void addSugarAndMilk() {
        System.out.println("addSugarAndMilk");
    }

    private void pourCup() {
        System.out.println("pourCup");
    }

    private void brewCoffeeGrinds() {
        System.out.println("brewCoffeeGrinds");
    }

    private void boilWater() {
        System.out.println("boilWater");
    }
}
public class Tea {
    void prepareRecipe() {
        boilWater();
        steepTeaBag();
        pourCup();
        addLemon();
    }

    private void boilWater() {
        System.out.println("boilWater");
    }

    private void steepTeaBag(){
        System.out.println("steepTeaBag");
    }

    private void pourCup() {
        System.out.println("pourCup");
    }

    private void addLemon() {
        System.out.println("addLemon");
    }

}

可以看出整体流程是一致的,(1)(3)操作又是完全的一致,(2)(4)操作是一样只不过应用在不同饮料上

好,看看如何把通用的抽象出来做成一个模板:

public abstract class CaffeineBeverage {
    final void prepareRecipe() {
        boilWater();
        brew();
        pourCup();
        addCondiments();
    }

    abstract void brew();

    abstract void addCondiments();

    private void boilWater() {
        System.out.println("Boiling water");
    }

    private void pourCup() {
        System.out.println("Pouring into cup");
    }
}
public class Tea extends CaffeineBeverage{

    @Override
    void brew() {
        System.out.println("Steeping the tea");
    }

    @Override
    void addCondiments() {
        System.out.println("Adding Lemon");
    }
}
public class Coffee extends CaffeineBeverage{

    @Override
    void brew() {
        System.out.println("Dripping Coffee through filter");
    }

    @Override
    void addCondiments() {
        System.out.println("Adding Sugar and Milk");
    }
}

打完一套,收工。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值