使用策略模式封装数据库连接

策略模式的目的是定义一定的算法结构,然后让其子类去按照自己的需要结合给定的算法骨架去实现特定的算法。对于本模式的算法,可以独立于客户存在,对于算法可以与客户端完成没有任何的联系!
本例封装了数据库连接,使数据库连接被完全封装了!
1、策略模式中的抽象算法接口

package com.hejianjiao.database;

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

public interface JdbcStrategy {

/**
* 策略抽象接口,定义了jdbc的一般通用算法
*/

Connection init();

void release(Statement statement, Connection conn);

void save(String sql);

ResultSet get(String sql);

}



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、对于算法的一种实现,封装数据库连接与操作

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 JdbcStrategyTemplate extends DatabaseInfo implements JdbcStrategy {

/**
* 对于策略的一个算法实现,它可以对算法进行自己的操作,在完成算法规定的基础上,可以处理自己的方法
*/

public Connection init() {
registerDriver();
return getConnection();
}

public void release(Statement statement, Connection conn) {
closeStatement(statement);
closeConnection(conn);
}

/**
* 操作数据
*/
public void save(String sql) {
PreparedStatement pstmt = null;
Connection conn = null;

try {
init();
pstmt = conn.prepareStatement(sql);
pstmt.executeUpdate();
} catch (SQLException e) {
System.out.println("数据操作失败!");
e.printStackTrace();
} finally {
release(pstmt, conn);
}
}

/**
* 获取数据
*/
public ResultSet get(String sql) {
PreparedStatement pstmt = null;
Connection conn = null;
ResultSet rs = null;

try {
init();
pstmt = conn.prepareStatement(sql);
rs = pstmt.executeQuery();

} catch (SQLException e) {
e.printStackTrace();
} finally {
release(pstmt, conn);
}
return rs;
}

/**
* 注册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();
}
}

}



策略模式减小了通用算法和具体控制细节的耦合,它比模板模式要复杂一些,但使用接口的形式,使得它的灵活度更高了。在需要完全替换算法的情况下,更加适用。因为它可以在不改变客户代码的基础上,对底层再一次进行封装。而它的一个缺点是客户端需要知道提供的策略有哪几种。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值