Java设计模式——行为型模式之模板模式

一、前言

   在我们的某些项目中,一些流程步骤或者算法往往都已经是固定好了的,唯一不同的是这些流程步骤或者算法中,某一个小的步骤有不同的实现方式。我们将这些不同实现方式的步骤抽取出来,将整个流程或者算法固定住,不允许子类改变,子类唯一可以做的就是现实父类中抽象的步骤或者方法。这种结构的设计模式我们称之为模板模式。

二、模板模式

概述:在模板模式(Template Pattern)中,一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。

使用场景:

1.一次性实现一个算法的不变的部分,并将可变的行为留给子类来实现。

2.各子类中公共的行为应被提取出来并集中到一个公共父类中以避免代码重复。 首先识别现有代码中的不同之处,并且将不同之处分离为新的操作。 最后,用一个调用这些新的操作的模板方法来替换这些不同的代码。

3.控制子类扩展。

优点: 1、封装不变部分,扩展可变部分。 2、提取公共代码,便于维护。 3、行为由父类控制,子类实现。

缺点:每一个不同的实现都需要一个子类来实现,导致类的个数增加,使得系统更加庞大。

我们在使用模板方式的时候,一般都需要给模板方法加上final修饰符,避免被恶意篡改。

三、代码展示

我们举一个打印的小例子,来演示模式。

3.1 将打印的流程固定封装好,都不同实现的地方进行抽象。

public abstract class Template {

    public abstract void print();
    
    public void update() {
        System.out.println("开始打印");
        for (int i = 0; i < 10; i++) {
            print();
        }
    }
}

3.2 子类实现抽象部分的行为

public class TemplateConcrete extends Template {

    @Override
    public void print() {
        System.out.println("打印图片");
    }
}

3.3 结果展示

public class Test {

    public static void main(String[] args) {
        Template temp = new TemplateConcrete();
        temp.update();
    }
}
开始打印
打印图片
打印图片
打印图片
打印图片
打印图片
打印图片
打印图片
打印图片
打印图片
打印图片

猜你喜欢

转载自blog.csdn.net/bandenger/article/details/88088028