定义:在一个方法中定义一个算法骨架,而将一些步骤延伸到子类中。(其本质:把可变和不可变进行分类。可变部分延伸到子类来完成,不变部分交给父类定义成骨架)
优点:
1)可以使的子类可以在不改变算法骨架的情况下,重新定义算法中的某些步骤。
2)模版方法通过把不变的部分搬移到超类,去除了子类中的重复代码。
3)子类实现算法的特定步骤,有利于算法的扩展。
4) 通过一个父类调用子类实现的操作,通过子类扩展新的行为,符合“开放-封闭原则”。
缺点:每一个不同的实现都需要一个子类来完成,这个会导致子类个数的增加,设计更抽象。
使用场景:
1)在某些算法中,有了相同的方法,造成的代码重复。
2)控制子类扩展,子类必须遵守算法规则。
场景:
冲茶水: 冲咖啡:
1) 洗杯子 1)洗杯子
2) 烧开水 2)烧开水
3) 加料(加茶叶) 3)加料(加咖啡)
4) 烫材料(沸水烫茶叶)4)烫材料(温水冲咖啡)
分析:
不变部分:冲咖啡和冲茶水的步骤是一样的,抽象部分(不变部分:1洗杯子、2烧开水、3加料、4烫材料)
可变部分:加料和烫料是可变部分。因此此部分需要交给子类扩展延伸,保证了代码在骨架上的重用。
1、定义模版(冲水模版)
public abstract class FlushWaterTemple{
//定义算法骨架
public void flushWater(){
wash();
boilWater();
addMaterial();
finshedWater();
}
public void wash(){
System.out.println("洗杯子");
}
public void boilWater(){
System.out.println("烧水");
}
//加料
public abstract void addMaterial();
//烫材料
public abstract void finshedWater();
}
}
2、冲茶叶
public class FlushTea extends FlushWaterTemple{
//加料
public void addMaterial(){
System.out.println("加点茶叶");
}
//烫材料
public void finshedWater(){
System.out.println("用沸水烫茶叶");
}
}
2、冲咖啡
public class FlushCoffee extends FlushWaterTemple{
//加料
public void addMaterial(){
System.out.println("加点咖啡");
}
//烫材料
public void finshedWater(){
System.out.println("用温水烫咖啡");
}
}
测试
public class Test{
public static void main(){
FlushWaterTemple tmp = new FlushCoffee();
tmp.flushWater();
}
}
分享到:
相关推荐
java抽象类的程序案例,可以准备参加华为2014年校园招聘机试题 做准备
Template模板设计模式改造threadlocal控制事务
设计模式总结-模板设计模式,单例模式(singleTon)
设计模式之模板模式。实现了一个设计模式。
10.6抽象类 10.6.1问题引入 10.6.2解决之道-抽象类快速入门 10.6.3抽象类的介绍 ...10.7抽象类最佳实践-模板设计模式 10.7.1基本介绍 10.7.2模板设计模式能解决的问题 10.7.3最佳实践 10.7.4模板设计
设计模式--模板方法模式java例子
定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。Template Method使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
NULL 博文链接:https://huagenli.iteye.com/blog/570695
设计模式之模板方法模式
Architect_day12:模板设计模式-定义及父中所用到的模板设计模式
非常简单的模版方法模式,相信你能通过这个实例能够快速掌握。
设计模式的模板方法模式的例子,希望对大家有用~~~~~~~~
Head First 设计模式 (八) 模板方法模式(Template Method pattern) C++实现
一篇关于C++模板 设计模式 软件架构的文档,里面实现了一个泛化的命令模式和观察者模式
适合20分钟左右讲解的模板方法模式。 自己上课用的。
java设计模式中的模板模式,纯Java代码
java设计模式之模板模式,实例子说明模板模式的使用场景。
模板模式的定义 模板模式的结构 模板模式的角色 模板模式的方法 模板模式的优点 模板模式的案例