模板模式——星巴克泡茶泡咖啡例题
Posted 3 ERROR(s)
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了模板模式——星巴克泡茶泡咖啡例题相关的知识,希望对你有一定的参考价值。
1.模板设计模式介绍
模板设计模式—基于抽象类的,核心是封装算法
-
模板方法定义了一个算法的步骤,并允许子类为一个或多个步骤提供具体实现
-
在一个方法中定义一个算法的骨架,并将一些具体步骤延迟到子类中实现。
-
模板模式使得子类可以在不改变算法结构的基础上,重新具体定义算法中的某些步骤
2.星巴克咖啡泡茶问题举例
例如我要制作两种饮品:
coffee:
1.煮开水
2.用开水煮咖啡
3.将饮品倒入杯子中
4.加入牛奶和方糖
tea:
1.煮开水
2.用开水煮茶
3.将饮品倒入杯子中
4.加入柠檬
我们发现制作两种饮品制作过程当中1 3步骤重复,所以可以将他们在父类中实现,制作过程有差异的2 4步骤可以延迟到子类自行实现!
3.原码
abstract class Drink
final void make() //用final修饰确保制作顺序不会被改变
boilWater(); //烧开水
putCailiao(); //放入茶叶或者coffee
pourCup(); //将饮品倒入杯子
addSomething(); //加入配料
public void boilWater()
System.out.println("烧开水");
private void pourCup()
System.out.println("将饮品倒入杯中");
/*
* 咖啡和茶处理这些方法不同,因此这两个方法必须被声明为抽象,留给子类实现
*/
protected abstract void putCailiao(); //这些方法延迟到子类实现
protected abstract void addSomething(); //这些方法延迟到子类实现
public class Tea extends Drink
@Override
protected void putCailiao()
System.out.println("煮茶叶了");
@Override
protected void addSomething()
System.out.println("加入了柠檬片");
public class Coffee extends Drink
@Override
protected void putCailiao()
System.out.println("开始煮咖啡");
@Override
protected void addSomething()
System.out.println("加入牛奶和糖");
public class Test
public static void main(String[] args)
Drink tea=new Tea();
Drink coffee =new Coffee();
tea.make();
System.out.println();
coffee.make();
4.钩子函数介绍
- 钩子方法是一类"默认不做事的方法" ,子类可以视情况决定要不要覆盖它们。
- 比如说,顾客点杯咖啡时,可以选择加不加牛奶或者糖
abstract class Drink
final void make() //用final修饰确保制作顺序不会被改变
boilWater(); //烧开水
putCailiao(); //放入茶叶或者coffee
pourCup(); //将饮品倒入杯子
if(ifCustomerWant())
addSomething(); //加入配料
void boilWater()
System.out.println("烧开水");
void pourCup()
System.out.println("将饮品倒入杯中");
protected abstract void putCailiao();
protected abstract void addSomething();
boolean ifCustomerWant() //钩子函数默认执行
return true;
import java.util.Scanner;
public class Coffee extends Drink
@Override
protected void putCailiao()
System.out.println("开始煮咖啡");
@Override
protected void addSomething()
System.out.println("加入牛奶和糖");
/**
* 子类覆写钩子函数
*/
boolean ifCustomerWant()
System.out.println("请问需要加入牛奶和方糖吗(yes/no)");
Scanner sc=new Scanner(System.in);
String str=sc.nextLine();
if(str.equals("yes"))
return true;
else
return false;
以上是关于模板模式——星巴克泡茶泡咖啡例题的主要内容,如果未能解决你的问题,请参考以下文章