享元模式的主要目的是实现对象的共享,即共享池,当系统中对象多的时候可以减少内存的开销,通常与工厂模式一起使用。
原理: 共享池创建和管理享元单元,当一个客户端请求时,工厂需要检查当前对象池中是否有符合条件的对象,如果有,就返回已经存在的对象,如果没有,则创建一个新对象。
下边根据享元模式的思想,写一个jdbc的连接池。
/**
* 享元模式实现连接池
*
* @author jiangwei
*
*/
public class ConnectionPool {
private Vector<Connection> pool;
// 公用属性
private String url = "jdbc:mysql://localhost:3306/test";
private String username = "root";
private String password = "root";
private String driverClassName = "com.mysql.jdbc.Driver";
//连接池的属性
private int poolSize = 100;
private static ConnectionPool instance = new ConnectionPool();
// 初始化连接池
private ConnectionPool() {
for (int i = 0; i < poolSize; i++) {
try {
Class.forName(driverClassName);
Connection conn = DriverManager.getConnection(url, username, password);
pool.add(conn);
} catch (Exception e) {
e.printStackTrace();
}
}
}
public Connection getConnection() {
Connection conn = pool.get(0);
pool.remove(conn);
return conn;
}
public void realese(Connection conn) {
pool.add(conn);
}
public static ConnectionPool getInstance() {
return instance;
}
}