【设计模式 - 23】之模版方法模式(Template)
1、模式简介
模版方法模式的定义:
模版方法模式在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模版方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。
模版方法模式的优点:
- 封装不变部分,扩展可变部分;
- 提取公共代码,便于维护;
- 行为由父类控制,子类实现。
模版方法模式的缺点:
每一个不同的实现都需要一个子类来实现,导致类的个数增加,使得系统更加庞大。
模版方法模式的适用场景:
- 当类中有多个子类共有的方法,且逻辑相同时;
- 当有重要的、复杂的方法时,可以考虑作为模板方法。
2、案例
冲泡咖啡和冲泡茶叶都有相同的步骤:
- 烧开水;
- 冲泡;
- 将咖啡/茶叶倒入到杯子中;
- 加调料。
因此,我们可以使用模版方法模式,将这些步骤提取出来作为模版使用。具体代码如下:
制作饮料的抽象父类BeverageMaker,将烧水和倒入杯子的方法封装,冲泡和加调料的方法抽出作为接口方法。代码如下:
public abstract class BeverageMaker { public final void makeBeverage() {
boilWater();
brew();
putInCup();
addCondiments();
} // 烧水
protected void boilWater() {
System.out.println("烧水......");
} // 冲泡
protected abstract void brew(); // 倒入到杯子中
protected void putInCup() {
System.out.println("倒入杯中......");
} // 加调料
protected abstract void addCondiments();
}
制作咖啡的方法类CoffeeMaker中的代码:
public class CoffeeMaker extends BeverageMaker { @Override
protected void brew() {
System.out.println("冲泡咖啡......");
} @Override
protected void addCondiments() {
System.out.println("添加牛奶......");
}
}
制作茶的方法TeaMaker中的代码:
public class TeaMaker extends BeverageMaker { @Override
protected void brew() {
System.out.println("冲泡茶叶......");
} @Override
protected void addCondiments() {
System.out.println("添加柠檬......");
}
}
测试类Test中的代码:
public class Test {
public static void main(String[] args) {
System.out.println("制作咖啡的步骤如下:");
BeverageMaker coffeeMaker = new CoffeeMaker();
coffeeMaker.makeBeverage(); System.out.println(); System.out.println("制作茶叶的步骤如下:");
BeverageMaker teaMaker = new TeaMaker();
teaMaker.makeBeverage();
}
}
运行结果如下图所示:
下面贴出模版方法模式代码的GitHub地址:【GitHub - Template】。
【设计模式 - 23】之模版方法模式(Template)的更多相关文章
- 设计模式 笔记 模版方法模式 Template Method
//---------------------------15/04/28---------------------------- //TemplateMethod 模版方法模式----类行为型模式 ...
- Head First 设计模式笔记(模版方法模式)
1.定义: 在一个方法中定义一个算法骨架,而将一些步骤延迟到子类中.模版方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤. 2.类图: 3.说明: 模版方法可以理解为一个方法里面包 ...
- 模版方法模式(Template Method)
1.概念 在模板模式(Template Pattern)中,一个抽象类公开定义了执行它的方法的方式/模板.它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行.这种类型的设计模式属于行为型 ...
- 《Head first设计模式》之模版方法模式
模板方法模式在一个方法中定义了一个算法的骨架,而将一些步骤延迟到子类中.模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤. 有些人没有咖啡就活不下去:有些人则离不开茶.两者共同的 ...
- 设计模式——模版方法模式详解(论沉迷LOL对学生的危害)
. 实例介绍 在本例中,我们使用一个常见的场景,我们每个人都上了很多年学,中学大学硕士,有的人天生就是个天才,中学毕业就会微积分,因此得了诺贝尔数学奖:也有的人在大学里学了很多东西,过得很充实很满意 ...
- NET设计模式 第二部分 行为型模式(15):模版方法模式(Template Method)
摘要:Template Method模式是比较简单的设计模式之一,但它却是代码复用的一项基本的技术,在类库中尤其重要. 主要内容 1.概述 2.Template Method解说 3..NET中的Te ...
- 设计模式之模版方法模式(Template Method Pattern)
一.什么是模版方法模式? 首先,模版方法模式是用来封装算法骨架的,也就是算法流程 既然被称为模版,那么它肯定允许扩展类套用这个模版,为了应对变化,那么它也一定允许扩展类做一些改变 事实就是这样,模版方 ...
- 第13章 模版方法模式(Template Method)
原文 第13章 模版方法模式(Template Method) 模板模式 模板模式 举例:模拟下数据库的update方法,先删除在插入. 1 2 3 4 5 6 7 8 9 10 11 12 13 ...
- .NET设计模式(16):模版方法(Template Method)(转)
摘要:Template Method模式是比较简单的设计模式之一,但它却是代码复用的一项基本的技术,在类库中尤其重要. 主要内容 1.概述 2.Template Method解说 3..NET中的Te ...
随机推荐
- (转载)DBGridEh导出Excel等格式文件
DBGridEh导出Excel等格式文件 uses DBGridEhImpExp; {--------------------------------------------------------- ...
- poj 3185 The Water Bowls
The Water Bowls 题意:给定20个01串(最终的状态),每个点变化时会影响左右点,问最终是20个0所需最少操作数? 水题..直接修改增广矩阵即可:看来最优解不是用高斯消元(若是有Gaus ...
- Razor模板引擎
Razor模板引擎 阅读目录 一.简介 二.非Mvc中使用Razor 三.总结 回到目录 一.简介 在MVC以外的场景中,我们往往需要完成一些模板引擎生成代码或页面的工作:在以前我们一般常用的有Raz ...
- OC中格式化输出符号
定义 说明 %@ Objective-C object, printed as the string returned by descriptionWithLocale: if available, ...
- 用19种编程语言写Hello World
用19种编程语言写Hello World 转载自:http://www.admin10000.com/document/394.html Hello World 程序是每一种编程语言最基本的程序,通常 ...
- caffe之(一)卷积层
在caffe中,网络的结构由prototxt文件中给出,由一些列的Layer(层)组成,常用的层如:数据加载层.卷积操作层.pooling层.非线性变换层.内积运算层.归一化层.损失计算层等:本篇主要 ...
- unidac连接FireBird数据库
dbconn: TUniConnection; with dbconn do begin if not Connected then begin ...
- 在C#里实现各种窗口切换特效,多达13种特效
原文:http://www.cnblogs.com/clayui/archive/2011/06/28/2092126.html 预览: 下载 这次clayui给大家带来了比较实用的东西,因为时间 ...
- hdu 1269
强连通分量题,用tarjin算法: 这是一道很简单的tarjin算法题,基本上就是套模板: 贴代码: #include<cstdio> #include<vector> #in ...
- Chapter 32:动态规划一 总结
今天做了四道dp题,分数306. 就从我的做题顺序开始讲.. 首先是第四题,明显的记录模数DP,很快打出来了. 后来做完之后回来拍第四题,也没有什么问题,就AC了. 然后是第三题,我的性子真是太急了, ...