Design Patterns -Template_Method mode

Template Method pattern belongs behavioral patterns. Intent template method pattern is implemented in a way where an algorithm, and postpone some of the steps defined in the algorithm, so that other classes redefine them.

one example

Often used in the project target RedisTemplate, restTemplate, JdbcTemplate like. Because resources when in operation, the process generally involves opening the connection, resources, close the connection. However, these steps is very versatile, so developers abstract template to define an algorithm a skeleton to define the specific operation and various resources subclass manner.
image

Abstract template class

/**
 * 数据源操作模版
 *  @author: xujian
 *  @Date: 2019-09-26
 *  @Description:
 */
public abstract class AbstractDataSourceTemplate {
    /**
     * 开启连接
     */
    abstract void open();

    /**
     * 执行操作
     */
    abstract void execute();

    /**
     * 关闭连接
     */
    abstract void close();

    /**
     * 模版方法
     */
    public final void run() {
        open();
        execute();
        close();
    }
}

Redis operational implementation class

public class RedisDataSourceTemplate extends AbstractDataSourceTemplate {
    /**
     * 开启连接
     */
    @Override
    void open() {
        System.out.println("开启redis连接...");
    }

    /**
     * 执行操作
     */
    @Override
    void execute() {
        System.out.println("操作redis...");
    }

    /**
     * 关闭连接
     */
    @Override
    void close() {
        System.out.println("关闭redis连接...");
    }
}

Jdbc operational implementation class

public class JdbcDataSourceTemplate extends AbstractDataSourceTemplate {
    /**
     * 开启连接
     */
    @Override
    void open() {
        System.out.println("开启jdbc连接...");
    }

    /**
     * 执行操作
     */
    @Override
    void execute() {
        System.out.println("操作jdbc...");
    }

    /**
     * 关闭连接
     */
    @Override
    void close() {
        System.out.println("关闭jdbc连接...");
    }
}

use

        //jdbc模版
        AbstractDataSourceTemplate template = new JdbcDataSourceTemplate();
        template.run();
        System.out.println("----------------");
        //redis模版
        AbstractDataSourceTemplate template1 = new RedisDataSourceTemplate();
        template1.run();
开启jdbc连接...
操作jdbc...
关闭jdbc连接...
----------------
开启redis连接...
操作redis...
关闭redis连接...

to sum up

  • Package immutable part, a variable extension portion
  • Extraction of common code, easy to maintain
  • Skeleton / algorithm behavior is controlled by the parent class, subclass achieve
  • For each of the different implementations we need to define a subclass, which results in increasing the number of classes, much larger systems, but also more abstract design
  • Abstract parent class is implemented by the subclasses, subclasses execution result affect the results of the parent class, which results in a reverse control structure, it increases the difficulty of reading the code

You can obtain the relevant code here: Design mode -Template_Method mode

Guess you like

Origin www.cnblogs.com/xuxiaojian/p/11593560.html