模板模式
模板模式与策略模式都是对于算法进行相关处理的设计模式,属于形为形模式。模板模式是使用继承来复写或者修改算法,具有定制性。策略模式是对算法进行抽调,或者说是对算法进行分类封装处理,使算法具有灵活性。
模板模式是定义一个算法骨架,然后让子类对实现算法的细节。使算法细节不改变主算法的结构。
它的结构为:
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类,用一个可以重用的形式,处理了数据库初使化、关闭等操作,然后在具体到一个对象时,就可以使用模板模式来重用模板类中的方法,以达到快捷开发的效果。
在上面这个例子来看,模板模式展示了一种经典的重用形式.
分享到:
相关推荐
总之,`MySql数据库连接封装类`是Java编程中常用的一种设计模式,它将数据库操作的复杂性隐藏起来,使代码更加简洁、易用,是提高开发效率的有效手段。在学习和使用过程中,理解其工作原理并熟练运用,对于提升编程...
在本篇博客笔记中,我们将探讨如何利用Java进行数据库连接,并将模板方法模式应用于数据库操作,以实现更高效和可维护的代码。 首先,要进行数据库连接,我们需要引入JDBC驱动。对于不同类型的数据库(如MySQL、...
由此引出了五种设计模式,这些模式不仅适用于数据库连接管理,而且在软件设计中具有广泛的应用。下面我们将深入探讨这五种设计模式及其在实际开发中的应用。 1. 单例模式(Singleton) 单例模式确保一个类只有一个...
本文将详细介绍如何使用提供的“通用数据库连接类(配置文件)”来实现灵活的数据库访问。这个工具类集成了多种常见数据库(如SQLServer、Oracle、MySQL)的支持,使得开发者无需修改源代码,只需调整配置文件即可...
### JDBC 数据库连接和操作的封装 #### 一、引言 在软件开发过程中,数据库操作是必不可少的一部分。为了提高代码的复用性和降低维护成本,通常会将数据库连接及基本的增删查改(CRUD)操作进行封装。本文将详细...
最后,对于大型项目,通常会采用设计模式和面向对象编程来组织代码,例如使用工厂模式创建数据库连接,使用单例模式确保全局唯一的数据源,使用DAO(数据访问对象)模式封装数据库操作,使代码更易于维护和扩展。...
在数据库操作中,封装可以将数据库连接、查询、插入、更新和删除等操作集中在一个类中,对外提供简洁的接口,隐藏内部复杂实现,从而降低代码的耦合度。 对于"Access数据库操作封装类库",我们可以设计一个名为`...
在Java编程领域,设计模式是解决常见问题的模板,提供了可重用的解决方案。工厂模式和DAO(Data Access Object)模式是两种常见的设计模式,它们在处理数据库操作时发挥着关键作用。本示例旨在帮助初学者理解如何...
此模板可能包含数据库连接配置、数据访问对象(DAOs)以及对数据库操作的封装。 4. **代码生成器**: 代码生成器是一个工具,能够根据数据库结构自动生成相应的BLL和DAL代码,极大地提高了开发效率。在本模板中,...
在IT行业中,数据库链接模板是实现Java应用程序与数据库...在实际开发中,可能还需要考虑性能优化,如使用连接池管理数据库连接,以及使用DAO(数据访问对象)模式来封装数据库操作,提高代码的可复用性和可维护性。
在这个登录系统中,我们通常会使用DAO模式来封装数据库操作。DAO是软件设计模式之一,用于分离业务逻辑层和数据访问层,使得代码更易于维护和测试。创建一个UserDAO接口,包含方法如`login(String username, String...
在名为"MVC_Frame2.0"的压缩包文件中,很可能包含了实现MVC三层模式的框架或示例项目,可能包括了Controller类、Model类、View模板以及与SQL Server 2005数据库交互的相关配置和代码。通过学习和理解这个项目,...
通过使用模板方法模式,JdbcTemplate可以避免大量的样板代码,并确保资源的正确关闭。配置一个JdbcTemplate Bean如下: ```java @Bean public JdbcTemplate jdbcTemplate(DataSource dataSource) { return new ...
在软件开发中,设计模式是一种解决常见问题的模板或最佳实践。工厂模式是其中最常用的一种,它提供了一种创建对象的最佳方式,特别是在需要根据不同的条件或者策略来创建不同类型对象时。在这个场景中,我们将讨论...
Spring JdbcTemplate简化了数据库操作,通过模板模式抽象出通用的流程,而回调机制则提供了定制化数据处理的能力。理解并熟练运用这些概念,能够帮助开发者更高效地进行数据库相关的编程,提高代码质量和可维护性。...
例如,工厂模式可以用来创建数据库连接,适配器模式可以用来将不同数据库接口统一为一致的API,而单例模式可以确保整个应用程序中只有一个数据库连接实例。 6. 异步操作:在现代应用程序中,为了提高用户体验,通常...
在Spring框架中,模板模式和回调模式经常结合使用。例如,在`RestTemplate`中,你可以看到模板方法`exchange()`,它定义了HTTP请求的基本流程,同时允许你通过回调接口(如`ResponseEntityCallback`)定制响应处理。...
在ASP.NET中,可以使用ADO.NET、Entity Framework或其他ORM工具来建立和管理数据库连接。数据库连接字符串通常在配置文件中定义,以便在不同环境中轻松切换。 在“WebSite1”这个压缩包文件中,可能包含了实现上述...
- **数据库连接管理**:通过连接池获取和释放数据库连接,这部分代码可以封装在一个模板方法中,确保每个数据库操作都遵循相同的生命周期。 - **SQL执行**:提供一个抽象方法,让子类定义具体的SQL查询或更新语句。...
- `JdbcUtil`和`BaseDao`体现了设计模式中的工厂模式和模板方法模式,前者为数据库连接创建一个统一的获取和关闭入口,后者提供了一套执行SQL的通用模板,降低了代码重复。 通过以上封装,开发者在实际操作数据库...