public class Flyweight {
public static void main(String[] args) {
IConnection con = ConnectionPool.getInstance().getConnection();
con.query("select * from user");
ConnectionPool.getInstance().release(con);
}
}
class ConnectionPool {
private List<IConnection> pool;
private int poolSize = 10;
private static ConnectionPool instance = new ConnectionPool();
private ConnectionPool() {
pool = new ArrayList<IConnection>(poolSize);
DriverManager.registerDriver(new MySqlDriver());
for (int i = 0; i < poolSize; i++) {
IConnection con = DriverManager.getConnection();
pool.add(con);
}
}
public static ConnectionPool getInstance() {
return instance;
}
/* 返回连接到连接池 */
public synchronized void release(IConnection con) {
pool.add(con);
System.out.println("release connection,poolsize=" + pool.size());
}
/* 返回连接池中的一个数据库连接 */
public synchronized IConnection getConnection() {
if (pool.size() > 0) {
IConnection con = pool.get(0);
pool.remove(con);
System.out.println("get connection,remain=" + pool.size());
return con;
} else {
return null;
}
}
}
输出为:
get connection,remain=9
MySql query ('select * from user') is executing......
release connection,poolsize=10
* 意图: 运用共享技术有效地支持大量细粒度的对象。