模板模式

设计模式-模板模式

常见设计模式分三大类:

  1. 创建模式:
    工厂方法, 抽象工厂, 建造模式, 原型模式, 单例模式5种.
  2. 结构模式:
    适配器模式, 桥梁模式, 代理模式, 装饰模式, 门面模式5种.
  3. 行为模式:
    模板模式, 迭代器模式, 观察者模式, 状态模式, 策略模式5种.

概述

模板模式定义了实线逻辑的通用模板,将实现细节穿透到具体模板类中.下面就以对数据库操作的封装为例演示模板模式的实际应用.

更新操作接口

1
2
3
4
5
6
/**
* 更新操作
*/
interface UpdateCallback {
void update(int update);
}

查询操作接口

1
2
3
4
5
6
/**
* 查询操作
*/
interface QueryCallback {
void query(ResultSet resultSet);
}

入口操作接口

1
2
3
4
5
6
7
8
/**
* 封装常用操作模板
*/
interface Executor {
void executor(UpdateCallback updateCallback);

void executor(QueryCallback queryCallback);
}

模板类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
class MySqlExecutor implements Executor {

private String sql;

public MySqlExecutor(String sql) {
this.sql = sql;
}

public void executor(UpdateCallback updateCallback) {

// 创建链接
Connection connection = null;
// 更新的记录树
String query = sql;
int update = 1;
// 调用子类重写的方法
updateCallback.update(update);
// 关闭链接
// connection.close();
}

public void executor(QueryCallback queryCallback) {
// 创建链接
Connection connection = null;
// 更新的记录树
String query = sql;
ResultSet resultSet = null;
// 调用子类重写的方法
queryCallback.query(resultSet);
// 关闭链接
// connection.close();
}

模板类的使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
new MySqlExecutor("update 1").executor(new UpdateCallback() {
public void update(int update) {
System.out.println("更新记录树" + update);
}
});

new MySqlExecutor("select 1").executor(new QueryCallback() {
public void query(ResultSet resultSet) {
if (null == resultSet)
System.out.println(" empty ");
else
System.out.println("执行封装逻辑");

}
});

全部代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
package com.xh.main;

import org.junit.Test;

import java.sql.Connection;
import java.sql.ResultSet;

/**
* Created by xiehui1956(@)gmail.com on 17-1-12.
*/
public class MyClass {

/**
* 更新操作
*/
interface UpdateCallback {
void update(int update);
}

/**
* 查询操作
*/
interface QueryCallback {
void query(ResultSet resultSet);
}

/**
* 封装常用操作模板
*/
interface Executor {
void executor(UpdateCallback updateCallback);

void executor(QueryCallback queryCallback);
}

class MySqlExecutor implements Executor {

private String sql;

public MySqlExecutor(String sql) {
this.sql = sql;
}

public void executor(UpdateCallback updateCallback) {

// 创建链接
Connection connection = null;
// 更新的记录树
String query = sql;
int update = 1;
// 调用子类重写的方法
updateCallback.update(update);
// 关闭链接
// connection.close();
}

public void executor(QueryCallback queryCallback) {
// 创建链接
Connection connection = null;
// 更新的记录树
String query = sql;
ResultSet resultSet = null;
// 调用子类重写的方法
queryCallback.query(resultSet);
// 关闭链接
// connection.close();
}
}

@Test
public void main() {
new MySqlExecutor("update 1").executor(new UpdateCallback() {
public void update(int update) {
System.out.println("更新记录树" + update);
}
});

new MySqlExecutor("select 1").executor(new QueryCallback() {
public void query(ResultSet resultSet) {
if (null == resultSet)
System.out.println(" empty ");
else
System.out.println("执行封装逻辑");

}
});

}

}

pom依赖

1
2
3
4
5
6
<!-- https://mvnrepository.com/artifact/junit/junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>

以上.