从一个ConnectionPool的实现看design pattern的运用 (四)

王朝java/jsp·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

从一个ConnectionPool的实现看design pattern的运用 (四)

好了,同学们,大家对上回的“李四猜想”有没有结果呀?

我们的口号是?。。。。。。

“没有蛀牙”!

No! 是“用户至上”!

既然用户有容易忘的可能,那就证明我们的工作做得不好。我们为什么非要用户做他们做不好或容易弄错的事呢?

好吧,让我们知错就改:

public interface ConnectionMan extends PooledConnection.Pool{

//在这个interface里,我们不再要求程序员必须封装Connection, 他们只需要直接返回Connection对象。 实际上,程序员可以完全忘记封装这码事。

//我们将对返回的对象进行封装。

Connection getConnection()throwsSQLException;

void clear();

void closeConnection(Connection conn);

}

//然后,我们用一下的decorator类对返回值进行封装

public class ConnectionMan2ConnectionPool implements ConnectionPool{

public final Connection getConnection()throws SQLException{

return PooledConnection.decorate(man.getConnection(), man);

}

public final void clear(){

man.clear();

}

private final ConnectionMan man;

private ConnectionMan2ConnectionPool(ConnectionMan man){

this.man = man;

}

public static ConnectionPool decorate(ConnectionMan man){

return new ConnectionMan2ConnectionPool(man);

}

}

这样,程序员只需要实现一个辅助interface ConnectionMan. 完全不要考虑封装Connection的事。然后再用我们的ConnectionMan2ConnectionPool类把它转换成ConnectionPool, 交给ConnectionPool的用户使用。耶!

“那万一李四忘了用ConnectionMan2ConnectionPool转换怎么办?”

呵呵,别忘了,编译器不是吃素的。用户期待ConnectionPool, 而李四只有ConnectionMan, 他想不转换也不行啊!

什么?今天的家庭作业?

啊,让你们家长写表扬信给ajoo老师。:)

玩笑。如果那位能发现进一步refactor的地方,欢迎指出!

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航