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

 

 

* 意图: 运用共享技术有效地支持大量细粒度的对象。