好了,同学们,大家对上回的“李四猜想”有没有结果呀? 
             
            我们的口号是?。。。。。。 
            “没有蛀牙”! 
             
            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的地方,欢迎指出!
             
                                        
              上一页         
              下一页 
           | 
         
       
       
       
       |