模板方法模式
来源:互联网 发布:网络dns错误怎么办 编辑:程序博客网 时间:2024/05/29 09:41
模板方法模式:在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中,模板方法使用子类可以在不改变算法的结构情况下,重新定义算法的某些步骤。
下面我们以沏茶和泡咖啡为例,来说明模板方法模式。
沏茶或者泡咖啡的流程类似,分为以下四步:
- 把水煮沸
- 泡茶或者咖啡
- 将饮料倒进杯子
- 添加调料
其中,第二步和第四步根据对象的不同,会有所区别。所有这两个方法可以交由子类去实现。代码如下:
一、抽象饮料模板
public abstract class AbstractBeverageTemplate { void prepareRecipe(){ //把水煮沸 boilWater(); //泡茶或者咖啡 brew(); //把饮料倒进杯子 pourInCup(); //钩子方法子类可以重写来选择是否添加调料 if(customerWantsCondiments()){ addCondiments(); } } abstract void brew(); abstract void addCondiments(); public void boilWater(){ System.out.println("Bolling water"); } public void pourInCup(){ System.out.println("Pouring into cup"); } /** * 钩子方法,是否添加调料,默认为false * @return */ public boolean customerWantsCondiments(){ return false; }}
2. 咖啡
public class CoffeeWithHook extends AbstractBeverageTemplate{ @Override void brew() { System.out.println("Dripping Coffee through flter"); } @Override void addCondiments() { System.out.println("Adding Suger and Milk"); } @Override public boolean customerWantsCondiments() { return true; }}
3. 茶
public class TeaWithOutHook extends AbstractBeverageTemplate { @Override void brew() { System.out.println("Steeping the tea"); } @Override void addCondiments() { System.out.println("Adding Lemon"); }}
5. 测试
public class TemplateTest { public static void main(String[] args) { AbstractBeverageTemplate tea = new TeaWithOutHook(); AbstractBeverageTemplate coffee = new CoffeeWithHook(); tea.prepareRecipe(); System.out.println("-------------------------------"); coffee.prepareRecipe(); }}
6. 运行结果
Bolling waterSteeping the teaPouring into cup-------------------------------Bolling waterDripping Coffee through flterPouring into cupAdding Suger and Milk
阅读全文
0 0
- 深入浅出模板方法模式
- 模板方法模式
- 模板方法模式
- 模板方法模式
- 模板方法设计模式
- 模板方法模式
- 模板方法模式
- 模板方法模式
- 模板方法模式
- 模板方法模式
- 模板方法模式
- 模板方法模式
- 模板方法模式
- 模板方法模式
- TemplateMethod模板方法模式
- 模板方法模式
- 模板方法模式
- 模板方法模式
- Guessing the Dice Roll HDU
- ubuntu下mysql的简单操作
- PV操作解决吃水果问题(Java实现)
- 求数组中元素第一次出现的索引值
- 学习testNG之报错-A JNI error has occurred
- 模板方法模式
- 有没有大神能够逐行解释一下代码?Delphi
- File类的概述和常用功能:File类的创建和删除功能:File类的判断功能:File类的获取功能和修改名字功能File的重要获取功能
- 单片机中常见英文缩写(51为例)
- 单链表逆置实现(C++)
- 通过人脸识别查找相似图片
- 梦想起飞的地方
- 石乐志的wwq
- promise 函数使用最佳实践体验