设计模式之模板方法模式(行为型)

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、模板方法模式特点及应用场景

  • 模板方法模式是通过把不变行为移动到超类,去除子类中的重复代码来提现它的优势。

模板方法应用场景

  • 模板方法是一个很好的代码复用平台,很多时候都会用到模板方法模式提取类中的公共行为到抽象类中

以上是关于设计模式之模板方法模式(行为型)的主要内容,如果未能解决你的问题,请参考以下文章

行为型模式之模板模式

行为型设计模式之模板方法模式

16行为型模式之模板模式

设计模式之模板方法模式(行为型)

GoF23种设计模式之行为型模式之模板方法

设计模式之行为型模式