模板模式
模板模式与策略模式都是对于算法进行相关处理的设计模式,属于形为形模式。模板模式是使用继承来复写或者修改算法,具有定制性。策略模式是对算法进行抽调,或者说是对算法进行分类封装处理,使算法具有灵活性。
模板模式是定义一个算法骨架,然后让子类对实现算法的细节。使算法细节不改变主算法的结构。
它的结构为:
1、
AbstractClass:通常使用抽象类,定义一系列抽象方法,具体子类可以重定义它,以实现各算法的具体步骤。
2、
ConcteteClass:实现抽象方法,以完成算法中与特定子类相关的步骤。
使用模板模式封装数据库连接类:
package com.hejianjiao.database;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class JdbcAbstractTemplate extends DabaseInfo {
/**
* 这就是模板模式中的模板,用于处理数据库连接的相关操作
*/
/**
* 注册JDBC驱动
*/
public void registerDriver() {
try {
Class.forName(driverClass);
} catch (ClassNotFoundException e) {
System.out.println("注册驱动失败!");
e.printStackTrace();
}
}
/**
* 取得连接
*/
public Connection getConnection() {
try {
return DriverManager.getConnection(url, username, password);
} catch (SQLException e) {
System.out.println("数据库连接失败!");
e.printStackTrace();
}
return null;
}
/**
* 关闭连接
*/
public void closeConnection(Connection conn) {
if (conn != null)
try {
conn.close();
} catch (SQLException e) {
System.out.println("数据库关闭失败!");
e.printStackTrace();
}
}
/**
* 关闭语句
*/
public void closeStatement(Statement statement) {
if (statement != null)
try {
statement.close();
} catch (SQLException e) {
System.out.println("语句关闭失败!");
e.printStackTrace();
}
}
/**
* 模板方法----操作数据
*/
public void save(String sql) {
PreparedStatement pstmt = null;
Connection conn = null;
try {
registerDriver();
conn = getConnection();
pstmt = conn.prepareStatement(sql);
pstmt.executeUpdate();
} catch (SQLException e) {
System.out.println("数据操作失败!");
e.printStackTrace();
} finally {
closeStatement(pstmt);
closeConnection(conn);
}
}
/**
* 模板方法----获取数据
*/
public ResultSet get(String sql) {
PreparedStatement pstmt = null;
Connection conn = null;
ResultSet rs = null;
try {
registerDriver();
conn = getConnection();
pstmt = conn.prepareStatement(sql);
rs = pstmt.executeQuery();
} catch (SQLException e) {
e.printStackTrace();
} finally {
closeStatement(pstmt);
closeConnection(conn);
}
return rs;
}
}
2、数据连接信息封装
package com.hejianjiao.database;
public class DatabaseInfo {
protected final String url = "jdbc:mysql://localhost:3306/test";
protected final String username = "root";
protected final String password = "";
protected final String driverClass = "org.gjt.mm.mysql.Driver";
}
3、使用User对象进行再一次封装操作
package com.hejianjiao.database;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Vector;
public class UserTemplate extends JdbcAbstractTemplate {
/**
* 对于User表的另外封装操作类
*/
/**
* 保存User对象数据
*/
public void saveUser(User user) {
String sql = "insert into user (username,password) values('"
+ user.getName() + "','" + user.getPassword() + "')";
super.save(sql);
}
/**
* 获取User对象信息
*/
public User getUserById(String id) {
Vector<User> vector = null;
String sql = "select * from user where id='" + id + "'";
ResultSet rs = super.get(sql);
User user = null;
if (rs != null) {
try {
while (rs.next()) {
user = new User();
user.setId(rs.getString(1));
user.setName(rs.getString(2));
user.setPassword(rs.getString(3));
vector.add(user);
if (vector != null) {
for (int i = 0; i < vector.size(); i++) {
user = (User) vector.elementAt(i);
}
}
}
} catch (SQLException e) {
e.printStackTrace();
}
}
return user;
}
/**
* 获取所有User信息列表
*/
public Vector getAllUser() {
String sql = "select * from user";
Vector vector = null;
User user = null;
ResultSet rs = super.get(sql);
if (rs != null) {
try {
user = new User();
user.setId(rs.getString(1));
user.setName(rs.getString(2));
user.setPassword(rs.getString(3));
} catch (SQLException e) {
e.printStackTrace();
}
vector.add(user);
}
return vector;
}
}
4、User对象
package com.hejianjiao.database;
public class User {
private String id;
private String name;
private String password;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
上面这个例子,JdbcAbstractTemplate类,用一个可以重用的形式,处理了数据库初使化、关闭等操作,然后在具体到一个对象时,就可以使用模板模式来重用模板类中的方法,以达到快捷开发的效果。
在上面这个例子来看,模板模式展示了一种经典的重用形式.
分享到:
相关推荐
比较实用,基础 目录 第一节 整理目的 3 第二节 jdbc的概念 3 2.1概念 3 2.2 Jdbc与应用程序的关系 3 2.3 数据库的连接步骤 4 2.4 Quick Start 4 ...15.5 模板模式的应用 100 第十六节 近期推出 101
1.3.3 借助模式封装多个变化 1.3.4 模式帮助我们解决问题 第2章 Delphi的模式编程机制 2.1 对象模型机制 2.1.1 对象模型 2.1.2 对象建模和模式编程 2.1.3 对象关系与复用 2.2 动态绑定机制 2.2.1 方法绑定 ...
1.3.3 借助模式封装多个变化 1.3.4 模式帮助我们解决问题 第2章 Delphi的模式编程机制 2.1 对象模型机制 2.1.1 对象模型 2.1.2 对象建模和模式编程 2.1.3 对象关系与复用 2.2 动态绑定机制 2.2.1 ...
这是一个根据MVC模式开发的一个小型框架。 说明: framework文件是框架文件,可将其重命名成你的项目名 ...Config目录下的config文件配置了数据库的连接...在config文档中修改数据库连接配置 包括:localhost、password
* 学习了使用JDBC进行数据库操作,使用Java的反射技术封装数据,使用单态模式去获得数据库连接, 图片的压缩处理等知识点 * 在界面中主要使用JTable的处理,表现层、业务层与数据访问层的分层结构, 大大减低...
实例054 包含数据库连接文件 85 实例055 包含网站头文件 86 实例056 包含网站尾文件 87 实例057 包含网站的主文件 88 2.4 条件语句 89 实例058 员工生日提醒 89 实例059 考试成绩评定标准 90 实例060 控制登录用户...
实例054 包含数据库连接文件 85 实例055 包含网站头文件 86 实例056 包含网站尾文件 87 实例057 包含网站的主文件 88 2.4 条件语句 89 实例058 员工生日提醒 89 实例059 考试成绩评定标准 90 实例060 控制登录用户...
设计模式之 Template(模板方法) 实际上向你介绍了为什么要使用 Java 抽象类,该模式原理简单,使用很普遍. 设计模式之 Strategy(策略) 不同算法各自封装,用户端可随意挑选需要的算法. 设计模式之 Chain of ...
采用数据库连接池技术,支持多数据库应用及多种数据库的应用,可以很好的处理断网、数据库重新启动等异常情况,一旦外界环境恢复后,连接池将重新连接数据库,不需要重启服务程序。 使用HTTP协议与客户端进行...
这样封装的结果对程序员来说,是一套开发模板(或者说模式)。针对不同的应用和目的,程序员采用不同的模板。例如,SDI应用程序的模板,MDI应用程序的模板,规则DLL应用程序的模板,扩展DLL应用程序的模板,OLE/...
在ASP.NET中使用WINDOWS验证方式连接SQL SERVER数据库 改进ADO.Net数据库访问方式 ASP.NET 2.0 绑定高级技巧 简单实用的DataSet更新数据库的类+总结 [ADO.NET]由数据库触发器引发的问题 为ASP.NET封装的SQL数据库...
面向对象,模拟人类日常思维模式解决计算机中的问题。将处理过程和数据进行封装和屏蔽,从而达到复用的效果。 java中万事万物皆为对象,类和对象是java编程的核心。类可以看成是属性和行为的抽象、封装。必须先有...
模板方法模式 访问者模式 设计案例 UML 架构 系统架构能力 基本理论 扩展性设计 可用性设计 可靠性设计 一致性设计 负载均衡设计 过载保护设计 协议设计 二进制协议 文本协议 接入层架构设计 DNS...
在数据库处理方面,不需要在数据层借助存储过程及数据库服务器端函数封装过多的业务逻辑,因此数据库系统采用相对精巧的MySQL[6]。 该在线博客系统服务器端如果需要布置到其他主机上,则该主机必备条件如下: 1. ...
10.5.2 使用OLE DB .NET Data Provider 连接txt 10.5.3 使用System.IO 命名空间 10.6 访问SQLite 10.6.1 SQLite 简介 10.6.2 SQLite 连接方法 10.7 小结 第四篇 ASP.NET网络编程 第 11 章用户控件和自定义控件 11.1 ...
10.5.2 使用OLE DB .NET Data Provider 连接txt 10.5.3 使用System.IO命名空间 10.6 访问SQLite 10.6.1 SQLite简介 10.6.2 SQLite连接方法 10.7 小结 第四篇 ASP.NET网络编程 第11章 用户控件和自定义控件 11.1 用户...
10.5.2 使用OLE DB .NET Data Provider 连接txt 10.5.3 使用System.IO命名空间 10.6 访问SQLite 10.6.1 SQLite简介 10.6.2 SQLite连接方法 10.7 小结 第四篇 ASP.NET网络编程 第11章 用户控件和自定义控件 11.1 用户...
10.5.2 使用OLE DB .NET Data Provider 连接txt 10.5.3 使用System.IO命名空间 10.6 访问SQLite 10.6.1 SQLite简介 10.6.2 SQLite连接方法 10.7 小结 第四篇 ASP.NET网络编程 第11章 用户控件和自定义控件 11.1 用户...
10.5.2 使用OLE DB .NET Data Provider 连接txt 10.5.3 使用System.IO命名空间 10.6 访问SQLite 10.6.1 SQLite简介 10.6.2 SQLite连接方法 10.7 小结 第四篇 ASP.NET网络编程 第11章 用户控件和自定义控件 11.1 用户...