Java设计模式之模板模式

1. 模板模式介绍

1、模板模式即模板方法模式自定义了一个操作中的算法骨架,而将步骤延迟到子类中,使得子类可以不改变一个算法的结构,可以自定义该算法的某些特定步骤;
2、父类中提取了公共的部分代码,便于代码复用;
3、部分抽象方法是由子类实现的,子类可以通过方法实现增加相应的功能;
4、为了防止公共骨架方法重写操作,一般公共流程方法上都加有 final 关键字;
5、自定义钩子方法控制公共流程方法某些步骤是否需要执行。

2.模板模式结构类

① 抽象方法:模板抽象类中自定义,由实现类具体实现。
② 具体方法:模板抽象类中非抽象方法(公共流程方法),实现类中可以继承或重写它。
③ 钩子方法:模板抽象类已经实现,用于判断的逻辑方法。实现类决定是否重写此方法,该方法为钩子方法

3.模板模式代码案例

一、模板抽象类

public abstract class IRobotTemplate<T> {
    // 骨架算法(流程)
    public final void processExecute(T param) {
        this.executeGo(param);
        // 钩子方法决定是否执行(默认不执行)
        if (this.isOpen()) {
            this.executeRun(param);
        }
    }

    // 步骤1-待实现
    public abstract void executeRun(T param);

    // 步骤2-待实现
    public abstract void executeGo(T param);

    // 钩子方法
    public boolean isOpen() {
        return false;
    }
}

二、模板实现类

@Component
public class RobotTemplate extends IRobotTemplate<UserInfo> {
    @Override
    public void executeRun(UserInfo userInfo) {
        System.out.println(userInfo.getUsername() + "会跑步");
    }

    @Override
    public void executeGo(UserInfo userInfo) {
        System.out.println(userInfo.getUsername() + "会走路");
    }

    @Override
    public boolean isOpen() {
        return true; // 重写钩子方法;使执行executeRun方法
    }
}

三、运行模板模式

@Resource
private IRobotTemplate robotTemplate;

@Override
public void process(UserInfo userInfo) {
	userInfo = new UserInfo();
	userInfo.setUsername("机器人小智");
	// 执行模板抽象类中的公共流程方法
    robotTemplate.processExecute(userInfo);
}

四、执行结果

在这里插入图片描述

你可能感兴趣的:(设计模式,设计模式,java)