设计模式--模板方法设计模式
2014-10-30 09:53
337 查看
1.定义:模板方法设计模式------在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。
2.引申知识点:骨架方法定义为final,目的是防止子类去修改它。算法步骤可以动态改变,使用的是钩子函数,子类决定是否执行。
3. head first 中的例子
4.代码部分
把水煮沸
用热水泡咖啡
把饮料倒进杯子
在咖啡中加入适当的牛奶和糖
------------------
把水煮沸
用热水泡茶
把饮料倒进杯子
2.引申知识点:骨架方法定义为final,目的是防止子类去修改它。算法步骤可以动态改变,使用的是钩子函数,子类决定是否执行。
3. head first 中的例子
1 | 冲泡咖啡 | 冲泡茶 | 抽象公共部分 |
2 | 把水煮沸 | 把水煮沸 | 把水煮沸 |
3 | 用沸水冲泡咖啡 | 用沸水冲泡茶叶 | 用热水泡咖啡或茶 |
4 | 把咖啡倒进杯子 | 把茶倒进杯子 | 把饮料倒进杯子 |
5 | 加糖和牛奶 | 加柠檬 | 在饮料中加入适当的调料 |
public abstract class CoffeineBeverage {// 咖啡因饮料 final void prepareRecipe() { // 准备 食谱 boilWater(); // 把水煮沸 brew(); // 用热水泡咖啡或茶 pourInCup(); // 把饮料倒进杯子 if (customerWantsCondiments()) { addCondiments();// 在饮料中加入适当的调料 } } abstract void brew(); abstract void addCondiments(); private void boilWater() { System.out.println("把水煮沸"); } private void pourInCup() { System.out.println("把饮料倒进杯子"); } // 钩子函数,子类可以进行修改,用于骨架的构建 public boolean customerWantsCondiments() { return true; } } public class CoffieWithHook extends CoffeineBeverage { @Override void brew() { System.out.println("用热水泡咖啡"); } @Override void addCondiments() { System.out.println("在咖啡中加入适当的牛奶和糖"); } } public class TeaWithHook extends CoffeineBeverage { @Override void brew() { System.out.println("用热水泡茶"); } @Override void addCondiments() { System.out.println("在茶中加入适当的柠檬"); } public boolean customerWantsCondiments() { return false; } } public class Client { public static void main(String[] args) { CoffieWithHook ch = new CoffieWithHook(); ch.prepareRecipe(); System.out.println("------------------"); TeaWithHook th = new TeaWithHook(); th.prepareRecipe(); } }运行结果:
把水煮沸
用热水泡咖啡
把饮料倒进杯子
在咖啡中加入适当的牛奶和糖
------------------
把水煮沸
用热水泡茶
把饮料倒进杯子
相关文章推荐
- 乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)
- 设计模式学习笔记(十六)——Template Method模板方法模式
- 设计模式笔记 13. TemplateMethod 模板方法模式(行为型模式)
- 设计模式之模板方法模式(Template Method)
- 设计模式学习之 模板方法模式
- 深入浅出Java模式设计之模板方法模式
- 设计模式学习笔记(十六)——Template Method模板方法模式
- 设计模式——模板方法模式(TemplateMethod)
- 深入浅出Java模式设计之模板方法模式
- 设计模式学习日志(14)-TemplateMethod模板方法(行为型模式)
- 设计模式 - Template Method Pattern(模板方法模式)
- 设计模式系列漫谈之六 - 模板方法模式
- 设计模式笔记(十五) —— 模板方法模式
- 乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)
- 设计模式(七)[模板方法(Template Method)模式]
- 第六个设计模式之:模板方法
- 浅析设计模式之模板方法
- 设计模式一模板方法模式(spring)
- 白话设计模式--行为型模式--Template Method模式(模板方法模式)
- 设计模式(1)- 模板方法 Template Method Pattern