动力节点首页 全国咨询热线:400-8080-105

绑定手机号,登录
手机号

验证码

微信登录
手机号登录
手机号

验证码

微信登录与注册
微信扫码登录与注册

扫码关注微信公众号完成登录与注册
手机号登录
首页 > 文章

模板方法模式例子

03-29 15:57 545浏览
举报 T字号
  • 大字
  • 中字
  • 小字

模板方法模式定义一个操作中的算法骨架,将一些步骤延迟到子类中。准备一个抽模板,实现部分逻辑,再声明一些对于子类需要不同实现的公用抽象方法。

场景:对于多个业务,它们的业务中有很多功能是相似的,有部分功能需要独自实现。这样我们就可以使用模板方法模式,将功能打散,抽取出更小的功能块,减小重复代码。

1.角色和作用

角色

作用

抽象模板

定义子类需要实现的不同功能块,以及子类共用的功能块

具体模板

实现各自不同的功能块

2.冲泡热饮

在泡咖啡和泡柠檬绿茶的时候,它们有部分功能是相同的-烧水,倒入杯子。而加的主料和调料是不同的。

热饮

有一个子类无法覆盖的方法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();
}

输出

泡咖啡
烧水
添加咖啡
将热饮倒入杯子
添加方糖
泡柠檬绿茶
烧水
放入茶叶
将热饮倒入杯子
加入柠檬片

 

0人推荐
共同学习,写下你的评论
0条评论
我是码农
程序员我是码农

25篇文章贡献87343字

相关课程 更多>

作者相关文章更多>

推荐相关文章更多>

Java面试题及答案整理

提枪策马乘胜追击04-21 20:01

Spring常见面试题

代码小兵92504-17 16:07

Java零基础实战项目——五子棋

代码小兵98804-25 13:57

Java string类详解

杨晶珍05-11 14:54

6道经典算法面试题

杨晶珍05-12 16:39

发评论

举报

0/150

取消