首页 > 代码库 > 模板方法模式(Template Method)
模板方法模式(Template Method)
1、定义
模板方法模式(Template Method Pattern),定义一个操作中的算法的框架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
2、通用类图
AbstractClass 叫抽象模板,它的方法分为两类:基本方法、模板方法
- 基本方法:基本方法也叫做基本操作,是由子类实现的方法,并且在模板方法被调用
- 模板方法:可以有一个或几个,一般是一个具体方法,也就是一个框架,实现对基本方法的调度,完成固定的逻辑。
为防止恶意的操作,一般模板方法都加上final关键字,不允许被覆写。
具体模板:实现父类所定义的抽象方法,也就是父类定义的基本方法在子类中得以实现。
3、通用类代码
package Template;/** *抽象模板类 * 2014-8-14上午10:51:32-limiracle */public abstract class AbstractClass { //基本方法 protected abstract void doSomething(); //基本方法 protected abstract void doAnything(); //模板方法 public final void templateMethod(){ /* * 调用基本方法,完成相关的逻辑 */ this.doAnything(); this.doSomething(); }}
package Template;public class ConcreteClass extends AbstractClass { //实现基本方法 protected void doSomething() { //业务逻辑处理 } protected void doAnything() { //业务逻辑处理 }}
package Template;public class ConcreteClass1 extends AbstractClass { //实现基本方法 protected void doSomething() { //业务逻辑处理 } protected void doAnything() { //业务逻辑处理 }}
package Template;public class Main { public static void main(String[] args) { AbstractClass class1=new ConcreteClass1(); AbstractClass class2=new ConcreteClass(); //调用模板方法 class1.templateMethod(); class2.templateMethod(); }}
4、杂谈
模板方法模式封装了不变的部分,扩展了可变的部分。它把认为是不变部分的算法封装到父类实现,而可变部分则可以通过继承来继续扩展。基本方法是由子类实现的,因此子类可以通过扩展的方式增加相应的功能,符合开闭原则。
按照我们的设计习惯,抽象类负责声明最抽象,最一般的事物属性和方法,实现类完成具体的事物属性和方法。但是模板方法模式却颠倒了,抽象类定义了部分抽象方法,由子类实现,子类代码执行的结果影响了父类的结果,也就是子类对父类产生了影响。
模板方法模式实现了父类依赖子类的场景。可以理解为父类调用了子类的具体方法。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。