java设计模式学习之模板方法模式
2017-01-12 17:41
561 查看
一、概述
类似于生活中很多事情都是有固定的流程和步骤,比如冲泡咖啡和泡茶它们都要经过如下步骤:
冲泡咖啡:
将水煮沸
用沸水冲泡咖啡
将饮料倒入杯中
添加糖和牛奶
泡茶
将水煮沸
用热水浸泡茶叶
将饮料倒入杯中
添加柠檬
于是我们可以将它们相同的步骤封装到父类中,而个性化的实现交给具体的子类来完成。
二、代码案例
1.定义抽象基类RefreshBeverage.java
2.咖啡类Coffee.java
3.茶类Tea.java
4.测试类RefreshBeverageTest.java
5.测试结果
三、总结
模板方法模式优缺点:
优点:通用的模板方法在基类中实现,个性化的方法交由子类去实现
封装性好
复用性好
屏蔽细节
便于维护
缺点:因为一个类只能继承一个父类,对于已经一个已经继承过的类来说,不适宜使用该模式
继承
类似于生活中很多事情都是有固定的流程和步骤,比如冲泡咖啡和泡茶它们都要经过如下步骤:
冲泡咖啡:
将水煮沸
用沸水冲泡咖啡
将饮料倒入杯中
添加糖和牛奶
泡茶
将水煮沸
用热水浸泡茶叶
将饮料倒入杯中
添加柠檬
于是我们可以将它们相同的步骤封装到父类中,而个性化的实现交给具体的子类来完成。
二、代码案例
1.定义抽象基类RefreshBeverage.java
package com.czhappy.designpattern.template; /** * * @ClassName: RefreshBeverage * @Description: 抽象基类 * @author chenzheng * @date 2017-1-12 下午04:36:41 */ public abstract class RefreshBeverage { //此处要声明为final,不能让子类覆盖该方法 public final void prepareBeverageTemplate(){ //将水煮沸 boilWater(); //浸泡 brew(); //将饮料倒入杯中 pourInCup(); //特殊的需求特殊处理 if(isCustomerWantsCondiments()){ //添加调味料 addCondiments(); } } protected boolean isCustomerWantsCondiments() { // TODO Auto-generated method stub return true; } protected abstract void addCondiments(); private void pourInCup() { System.out.println("将饮料倒入杯中"); } protected abstract void brew(); private void boilWater() { System.out.println("将水煮沸"); } }
2.咖啡类Coffee.java
package com.czhappy.designpattern.template; public class Coffee extends RefreshBeverage{ @Override protected void brew() { System.out.println("用沸水冲泡咖啡"); } @Override protected void addCondiments() { System.out.println("添加糖和牛奶"); } }
3.茶类Tea.java
package com.czhappy.designpattern.template; public class Tea extends RefreshBeverage{ @Override protected void brew() { System.out.println("用热水浸泡茶叶"); } @Override protected void addCondiments() { System.out.println("添加柠檬"); } @Override protected boolean isCustomerWantsCondiments() { // TODO Auto-generated method stub return true; } }
4.测试类RefreshBeverageTest.java
package com.czhappy.designpattern.template; public class RefreshBeverageTest { public static void main(String[] args) { System.out.println("置备咖啡..."); RefreshBeverage rb1 = new Coffee(); rb1.prepareBeverageTemplate(); System.out.println("咖啡好了"); System.out.println("\n***************"); System.out.println("置备茶..."); RefreshBeverage rb2 = new Tea(); rb2.prepareBeverageTemplate(); System.out.println("茶好了"); } }
5.测试结果
三、总结
模板方法模式优缺点:
优点:通用的模板方法在基类中实现,个性化的方法交由子类去实现
封装性好
复用性好
屏蔽细节
便于维护
缺点:因为一个类只能继承一个父类,对于已经一个已经继承过的类来说,不适宜使用该模式
继承
相关文章推荐
- java 设计模式 学习笔记(9) 模板方法模式
- [学习笔记]Java模板方法和单例设计模式
- JAVA学习--模板方法设计模式
- JAVA学习--模板方法设计模式
- 设计模式学习笔记---模板方法模式template method pattern(Java版)
- Java学习笔记之抽象(abstract)与模板方法设计模式
- Java设计模式学习记录-模板方法模式
- java学习笔记-设计模式15(模板方法模式)
- [学习笔记]Java模板方法和单例设计模式
- java设计模式之模板方法
- 设计模式学习--模板方法模式
- 设计模式(九): 从醋溜土豆丝和清炒苦瓜中来学习"模板方法模式"(Template Method Pattern)
- 举例讲解Java设计模式编程中模板方法模式的运用实例
- Java设计模式之模板方法设计模式
- 【java设计模式】之 模板方法(Template Method)模式
- 【行为型模式】模板方法模式(template method)之23种java设计模式
- 设计模式C++学习笔记之九(Template Method模板方法模式)
- Java设计模式之模板方法设计模式
- 设计模式学习笔记之模板方法模式
- java模板方法设计模式(Template Method)