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

从一个ConnectionPool的实现看design pattern的运用 (四) (转)[@more@] 

从一个ConnectionPool的实现看design pattern的运用 ()XML:namespace prefix = o ns = "urn:schemas-microsoft-com:Office:office" />

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

 

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

“没有蛀牙”!

 

No! 是“用户至上”!

 

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

 

好吧,让我们知错就改:

 

public interface ConnectionMan extends PooledConnection.Pool{

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

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

  Connection getConnection()throws sqlException;

  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的地方,欢迎指出!


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10752043/viewspace-992454/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/10752043/viewspace-992454/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值