设计模式之模板方法模式(行为型)
Posted 一起来搬砖呀
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式之模板方法模式(行为型)相关的知识,希望对你有一定的参考价值。
1、模板方法模式定义
模板方法的定义:模板方法模式定义一个算法的骨架(抽象类),而将一些步骤延迟到子类中(继承父类),在不改变算法架构的情况下,重新定义算法中的某些步骤(重写),既然使用了继承,并且肯定这个继承有意义,就应该要成为子类的模板,所有重复的代码都应该上升到父类去,而不是让每个子类都去重复
当我们要完成在某一细节层次一致的一个过程或者一系列步骤,但个别步骤在更详细的层次上实现可能不同的时候,我们通常使用模板方法模式处理。
2、模板方法模式结构
AbstractClass 抽象类,抽象模板,定义并实现了一个具体模板方法,给出了一个算法的基本骨架,组成步骤有相应的抽象方法,在子类中进行实现
/**
* 抽象模板,定义了一个具体方法,方法逻辑组成有一些抽象方法,抽象方法在子类中进行实现
*/
public abstract class AbstractClass
public abstract void primitiveOperationA();
public abstract void primitiveOperationB();
public void primitiveOperationC()
System.out.println("抽象模板方法执行完成~");
public void TemplateMethod()
System.out.println("执行抽象模板方法 TemplateMethod");
primitiveOperationA();
primitiveOperationB();
primitiveOperationC();
ConcreteClass,实现父类定义的多个抽象方法,每个 AbstractClass 都可以有多个 ConcreteClass 实现,每个 ConcreteClass 都可以给出这些抽象方法的不同实现,使父类方法的实现各不相同
/**
* 具体实现 A,实现父类抽象方法
*/
public class ConcreteClassA extends AbstractClass
@Override
public void primitiveOperationA()
System.out.println("具体实现类 A 方法 1 实现");
@Override
public void primitiveOperationB()
System.out.println("具体实现类 A 方法 2 实现");
/**
* 具体实现 B,实现父类抽象方法,与 ConcreteClassA 不同的方法实现
*/
public class ConcreteClassB extends AbstractClass
@Override
public void primitiveOperationA()
System.out.println("具体实现类 B 方法 1 实现");
@Override
public void primitiveOperationB()
System.out.println("具体实现类 B 方法 2 实现");
调用方代码
public class TemplateMethodTest
public static void main(String[] args)
AbstractClass abstractClass;
// 调用具体实现 A
abstractClass = new ConcreteClassA();
abstractClass.TemplateMethod();
// 调用具体实现 B
abstractClass = new ConcreteClassB();
abstractClass.TemplateMethod();
// 执行抽象模板方法 TemplateMethod
// 具体实现类 A 方法 1 实现
// 具体实现类 A 方法 2 实现
// 抽象模板方法执行完成~
// 执行抽象模板方法 TemplateMethod
// 具体实现类 B 方法 1 实现
// 具体实现类 B 方法 2 实现
// 抽象模板方法执行完成~
3、模板方法模式特点及应用场景
- 模板方法模式是通过把不变行为移动到超类,去除子类中的重复代码来提现它的优势。
模板方法应用场景
- 模板方法是一个很好的代码复用平台,很多时候都会用到模板方法模式提取类中的公共行为到抽象类中
以上是关于设计模式之模板方法模式(行为型)的主要内容,如果未能解决你的问题,请参考以下文章