模板方法模式有这样的定义:定义一个操作中的算法的框架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构既可重定义该算法的某些特定步骤。
模板方法的使用场景有:
1:多个子类有公有的方法,并且处理逻辑基本相:
2:重要重复的算法,可以把核心算法设计为模板方法,周边的相关细节功能则由各个子类实现
3:重构时,模板方法模式是一个经常使用到的模式,把相同的代码抽取到父类中,然后通过钩子函数约束其行为。
package com.gengu.模板方法;
/**
* 这是一个超类
* */
public abstract class AbstractClass {
/** 随意的两个方法*/
public abstract void doSomething();
public abstract void doAnything();
/** 模板方法 加上一个final 防止该方法被重写*/
public final void templateMethod(){
this.doAnything();
this.doAnything();
}
}
package com.gengu.模板方法;
public class ConcreteClass1 extends AbstractClass {
@Override
public void doAnything() {
System.out.println("类1的anything操作");
}
@Override
public void doSomething() {
System.out.println("类1的something操作");
}
}
package com.gengu.模板方法;
public class ConcreteClass2 extends AbstractClass{
@Override
public void doAnything() {
System.out.println("类2的anything操作");
}
@Override
public void doSomething() {
System.out.println("类2的something操作");
}
}
测试类
package com.gengu.模板方法;
public class Client {
public static void main(String[] args){
AbstractClass concrete1 = new ConcreteClass1();
concrete1.templateMethod();
}
}
可以看到,这里是把本应该归子类做的事情抽取出来放到父类中来完成了。
它的优点是封装不可变部分,扩展可变部分,提取公共部分代码,便于维护,有些行为由父类维护,子类实现。
它的缺点也很明显:子类执行的结果很明显的会影响到父类的结果,也就是子类对父类产生了影响。
分享到:
相关推荐
策略模式结合模板方法模式的设计思路 策略模式结合模板方法模式是策略模式的一种变形,目的是为了解决策略模式中的一些共性问题。在策略模式中,经常会出现这样一种情况,就是发现这一系列算法的实现上存在公共功能...
java的23种常用设计模式:模板方法模式
适合20分钟左右讲解的模板方法模式。 自己上课用的。
模板方法模式:定义一个操作中的算法骨架,而将一些步骤延迟到子类中,模板方法使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤。
设计模式-模板方法模式(讲解及其实现代码)
设计模式C++学习之模板方法模式(Template Method)
设计模式模板方法模式PPT学习教案.pptx
模板方法模式的示例代码和文档,学习模板方法模式的参考资料。
模板方法模式是基于继承的代码复用基本技术,模板方法模式的结构和用法也是面向对象设计的核心之一。在模板方法模式中,可以将相同的代码放在父类中,而将不同的方法实现放在不同的子类中。 在模板方法模式中,我们...
iOS模板方法模式使用心得demo
模板方法模式例子代码
处理层的设计采用了设计模式中的策略模式、模板方法模式和工厂模式。 Server端和Client端的实现也采用了分层的设计方式,包含自定义的模型层、视图层和控制层。 说明:程序采用配置文件的方式进行初始化,运行时时请...
设计模式--模板方法模式java例子
Head First 设计模式 (八) 模板方法模式(Template Method pattern) C++实现
模板方法模式是一种行为设计模式,它在一个方法中定义算法的骨架,将一些步骤延迟到子类中实现。 具体来说,模板方法模式的关键特点包括: 抽象类:在抽象类中定义一个模板方法,该方法给出了算法的框架。 具体...
将《Head First 设计模式》(中文版)按章节进行了分割,每章一个文件,方便大家下载。