设计模式 之 模版模式
来源:互联网 发布:网络安全教育黑板报 编辑:程序博客网 时间:2024/05/16 12:47
template method (模版模式)
前传:
模版模式是我的初恋。我和她最好相识在在mfc里面,她留给我良好的印象。
而后,各级政府开始大行其道,上有政策,下有对策,成为它存在的依据。
实现:
这个模式实现的手段:一个方法中定义一个算法的骨架,将一些步骤延迟到子类中。
延迟的核心技术就是:多态
还是举个例子吧:
class 丈母娘
{
public:
结婚要求(成员方法)
{
聘礼(){ 有下限(10万),无上限 }
首饰(){几件吧}
房子(){100平}
汽车(){最少12万的别克}
}
}
class 女儿 :public class 丈母娘
{
public:
结婚要求(成员方法)
{
聘礼(){多少给点吧};
首饰(){几件吧};
房子(){50平的二手房};
汽车(){国产品牌车QQ};
}
}
一个方法中定义一个算法的骨架,将一些步骤延迟到子类中。
好处:子类可以在不改变算法结构的情冴下,重新定义算法中的某些步骤。
父类定义框架,子类实现其中的一部分
好处: 提供了一个代码复用方法。
号外:
在模版模式中使用挂钩(hook)
实现方法 :写一个多态的,空实现的 占位函数,让子类决定要不要实现它
以下网上一个兄弟的例子似乎比我的例子好一点。(出处http://meigesir.iteye.com/blog/1506484)
冲泡咖啡和冲泡茶的例子
加工流程:
咖啡冲泡法:1.把水煮沸、2.用沸水冲泡咖啡、3.把咖啡倒进杯子、4.加糖和牛奶
茶冲泡法: 1.把水煮沸、2.用沸水冲泡茶叶、3.把 茶 倒进杯子、4.加蜂蜜
实践步骤:
1>创建一个模板(抽象)类:Beverage(饮料)
- package com.kaishengit.beverage;
- public abstract class Beverage {
- /**
- * 冲泡咖啡或茶...流程
- */
- public final void create(){
- boilWater();//把水煮沸
- brew();//用沸水冲泡...
- pourInCup();//把...倒进杯子
- addCoundiments();//加...
- }
- public abstract void addCoundiments();
- public abstract void brew();
- public void boilWater() {
- System.out.println("煮开水");
- }
- public void pourInCup() {
- System.out.println("倒进杯子");
- }
- }
2>创建一个咖啡类(Coffee)和茶(Tea)类,都继承Beverage抽象类
1.咖啡(Coffee)
- package com.kaishengit.beverage;
- public class Coffee extends Beverage{
- @Override
- public void addCoundiments() {
- System.out.println("添加糖和牛奶"); }
- @Override
- public void brew() {
- System.out.println("用水冲咖啡");
- }
- }
2.茶(Tea)
- package com.kaishengit.beverage;
- public class Tea extends Beverage{
- @Override
- public void addCoundiments() {
- System.out.println("添加蜂蜜");
- }
- @Override
- public void brew() {
- System.out.println("用水冲茶");
- }
- }
- 设计模式之模版模式
- 设计模式 之 模版模式
- 设计模式之模版模式
- 设计模式之模版模式
- 设计模式之模版模式
- 02 设计模式之--模版设计模式
- 设计模式之:模版设计模式
- 设计模式之模版设计模式
- 设计模式之_模版设计模式
- 设计模式之Template(模版)
- 设计模式之模版方法
- 设计模式之模版方法模式
- 设计模式之模版方法模式
- java 设计模式之三-模版模式
- 设计模式之模版方法模式
- 大话设计模式之模版方法模式
- 设计模式之模版方法模式
- 设计模式之模版方法模式
- O(n) 求 最长回文子串
- 如何进行整合营销
- LA3644 并查集判环
- 使用FileSystem类操作HDFS文件
- HOJ 12817 Shipura(手动模拟栈)
- 设计模式 之 模版模式
- acdream 1142 搜索
- maven创建多级目录工程
- Android Launcher解析和批改9——Launcher启动APP流程
- 简单的最小生成树1078
- vim+tags+cscope+taglist
- execute、executeQuery和executeUpdate之间的区别
- java 序列化和反序列化
- 初学STM32的心得与建议