Head First设计模式笔记(模板方法模式)

在研究模板模式之前,先看2段代码
1.

public class Coffee {

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

    public void boilWater(){
        System.out.println("boiling water...");
    }

    public void brewCoffeeGrinds(){
        System.out.println("dripping coffee through filter");
    }

    public void pourInCup(){
        System.out.println("pouring into cup");
    }

    public void addSugarAndMilk(){
        System.out.println("adding sugar and milk");
    }
}

2.

public class Tea {

    void prepareRecipe(){
        boilWater();
        steepTeaBag();
        pourInCup();
        addLemon();
    }

    public void boilWater(){
        System.out.println("boiling water...");
    }

    public void steepTeaBag(){
        System.out.println("steeping the tea...");
    }

    public void addLemon(){
        System.out.println("adding lemon...");
    }

    public void pourInCup(){
        System.out.println("Pouring into cup...");
    }
}

我们可以看出上面2段代码很类似,但是确不是完全一样
下面我们来看看模板方法的定义
模板方式:定义了一个算法的步骤,并允许子类为一个或多个步骤提供实现,模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤

public abstract class CaffeeineBeverage {

    final void prepareRecipe(){
        boilWater();
        brew();
        pourInCup();
        addCondiments();
    }

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

    //不一样的部分做成抽象类,等待子类去实现
    abstract void brew();

    abstract void addCondiments();

    void pourInCup(){
        System.out.println("pouring into cup...");
    }

}

写一个超类,公用的方法放在超类中实现,不同的方法做成抽象类,以便子类来实现

public class Coffee extends CaffeeineBeverage{

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

    @Override
    void addCondiments() {
        System.out.println("adding sugar and milk");
    }

}

如果是有的方法在子类中可以实现也可以不实现的话,在超类中可以做一个钩子,模板模式也是比较简单,但在实际使用的过程中,一定要注意步骤拆分的粒度,不要拆分的太细,太细导致子类要实现的东西较多,太粗的话,又达不到效果,因此要更加实际的情况有效的拆分

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值