模板方法
来源:互联网 发布:企业铃声制作软件 编辑:程序博客网 时间:2024/05/17 03:02
/* * 抽象基类,为所有子类提供一个算法框架 * * 提神饮料 */public abstract class RefreshBeverage { /* * 制备饮料的模板方法 * 封装了所有子类共同遵循的算法框架 */ public final void prepareBeverageTemplate(){ //步骤1 将水煮沸 boilWater(); //步骤2 泡制饮料 brew(); //步骤3 将饮料倒入杯中 pourInCup(); if(isCustomerWantsCondiments()){ //步骤4 加入调味料 addCondiments(); } } /* * Hook, 钩子函数,提供一个默认或空的实现 * 具体的子类可以自行决定是否挂钩以及如何挂钩 * 询问用户是否加入调料 */ protected boolean isCustomerWantsCondiments() { return true; } /* * 基本方法,将水煮沸 */ private void boilWater() { System.out.println("将水煮沸"); } /* * 基本方法,将饮料倒入杯中 */ private void pourInCup() { System.out.println("将饮料倒入杯中"); } /* * 抽象的基本方法,泡制饮料 */ protected abstract void brew(); /* * 抽象的基本方法, 加入调味料 */ protected abstract void addCondiments();}
/* * 具体子类,提供了制备茶的具体实现 */public class Tea extends RefreshBeverage { @Override protected void brew() { System.out.println("用80度的热水浸泡茶叶5分钟"); } @Override protected void addCondiments() { System.out.println("加入柠檬"); } @Override /* * 子类通过覆盖的形式选择挂载钩子函数 * @see com.imooc.pattern.template.RefreshBeverage#isCustomerWantsCondiments() */ protected boolean isCustomerWantsCondiments(){ return false; }}
/* * 具体子类,提供了咖啡制备的具体实现 */public class Coffee extends RefreshBeverage { @Override protected void brew() { System.out.println("用沸水冲泡咖啡"); } @Override protected void addCondiments() { System.out.println("加入糖和牛奶"); }}
public class RefreshBeverageTest { public static void main(String[] args) { System.out.println("制备咖啡..."); RefreshBeverage b1 = new Coffee(); b1.prepareBeverageTemplate(); System.out.println("咖啡好了!"); System.out.println("\n******************************************"); System.out.println("制备茶..."); RefreshBeverage b2 = new Tea(); b2.prepareBeverageTemplate(); System.out.println("茶好了!"); }}
参考:http://www.imooc.com/
0 0
- 模板方法
- 模板方法
- 模板方法
- 模板方法
- 模板方法
- 模板方法
- 模板方法
- 模板方法
- 模板方法
- 模板方法
- 模板方法
- 模板方法
- 模板方法
- 模板方法
- 模板方法
- 模板方法
- 模板方法
- 模板方法
- SS14封装
- Wordnet的一些简单使用
- iBatis框架使用
- Activity启动模式详解
- 搜索引擎---倒排索引
- 模板方法
- DLL劫持(HiJack)原理以及实现细节
- 冒泡排序再学习改进冒泡排序(c++)
- 简单谈谈android studio 的单元测试
- java 常见的异常大集合
- yii2 安装问题 利用composer安装 windows环境
- Java Web 中application(应用级) session(会话级) request(请求级)如何实现数据共享
- php require和include区别
- linq去掉不等于0的数据求平均