<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 66,  comments - 11,  trackbacks - 0
        Decorator模式:簡單來講,就是通過一個Decorator對原有對象進行封裝,同事實現與原有對象相同的接口,從而得到一個基于原有對象的,對既有接口的增強型實現。
        首先引入一個ConnectionDecorator類:
       
    public class ConnectionDecorator implements Connection{
          Connection dbconn;
          
    public ConnectionDecorator(Connnection conn){
            
    this.dbconn = conn;//實際從數據庫獲得的Connection引用
          }
          
    public void close()throws SQLException{
            
    this.dbconn.close();
          }
          
    public void commit()throws SQLException{
            
    this.dbconn.commit();//調用實際連接的commit方法
          }
          
        }
        ConnectionDecorator類實際上是對傳入的數據庫連接加上了一個外殼,它實現了java.sql.Connection接口,不過本身并沒有實現任何實際內容,只是簡單的把方法的實現委托給運行期實際獲得的Connection實例,而從外部看,ConnectionDecorator與普通的Connection實例沒有什么區別。
       
    public class PooledConnection extends ConnectionDecorator implements Connection{
          
    private ConnectionPool connPool;
          
    public PooledConnection(ConnectionPool pool,Connection conn){
            
    super(conn);
            connPool 
    = pool;
          }
          
    //覆蓋close方法,將數據庫連接返回連接池中,而不是直接關閉連接
          public void close()throws SQLException{
            connPool.releaseConnection(
    this.dbconn);
          }
    }

    動態代理:
      
    public class ConnectionHandler implements InvocationHandler{
          Connection dbconn;
          ConnectionPool pool;

          
    public ConnectionHandler(ConnectionPool connPool){
            
    this.pool = connPool;
          }
          
    //將動態代理綁定到指定Connection
          public Connection bind(Connection conn){
            
    this.dbconn = conn;
            Connection proxyConn 
    = (Connection)Proxy.newProxyInstance(conn.getClass().getClassLoader(),conn.getClass().getInterfaces(),this);
            
    return proxyConn;
          }
          
    //方法調用攔截器
          public Object invoke(Object proxy,Method method,Object[] args)throws Throwable{
            Object obj 
    =null;
            
    if("close".equals(method.getName())){
              pool.releaseConnection(dbconn);
            }
    else{
              obj 
    = method.invoke(dbconn,args);
            }
            
    return obj;
          }
        }
        ConnectionHandler connHandler 
    = new ConnectionHandler(this);
        
    return connHandler.bind(conn);
    可以看到,基于Dynamic Proxy模式的實現相對Decorator更加簡潔明了。

    posted on 2009-10-08 10:02 王永慶 閱讀(205) 評論(0)  編輯  收藏 所屬分類: HIBERNATE
    <2009年10月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    常用鏈接

    留言簿(1)

    隨筆分類

    隨筆檔案

    關注blogs

    搜索

    •  

    最新評論

    • 1.?re: 心中的那個她[未登錄]
    • 如果心情能那么容易放開就好了,碰到她是我的緣分,但是她的緣分不知道在哪里。
    • --王永慶
    • 2.?re: 心中的那個她[未登錄]
    • 兄弟,喜歡就大膽去追好了,就是因為喜歡才會有不愉快,如果想一輩子沒有這些煩惱,找一個可有可無的人就好了。這種事講的是緣分吧。別人對你好不好其實不太重要。放開心情就好了。
    • --萍水相逢
    • 3.?re: 心中的那個她
    • 只能同甘不能共苦,就他媽算了吧,程序員也是人??!我現在也很討厭女的不理解人情。
    • --咖啡妝
    • 4.?re: 難以割舍的那份情感
    • 評論內容較長,點擊標題查看
    • --王永慶
    • 5.?re: 難以割舍的那份情感
    • 評論內容較長,點擊標題查看
    • --隔葉黃鶯

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 免费在线观影网站| 亚洲精品国产精品乱码不卡√ | 91亚洲性爱在线视频| 成人最新午夜免费视频| 黄页网站在线观看免费| 久久亚洲国产成人亚| 在线jyzzjyzz免费视频| 国产免费区在线观看十分钟 | 免费看美女让人桶尿口| 国产一区二区三区免费观在线| 亚洲国产精品日韩在线| 亚洲精品国精品久久99热| 亚洲高清视频免费| 国产99精品一区二区三区免费| 亚洲成av人片在线看片| 国产av无码专区亚洲国产精品| 成人国产网站v片免费观看| 亚洲一区二区在线视频| 亚洲AV无码乱码在线观看性色扶 | 你懂的在线免费观看| 亚洲乱码国产乱码精华| 亚洲AV乱码久久精品蜜桃 | 亚洲国产综合精品中文第一| 青青草原亚洲视频| 日韩免费高清视频网站| 永久在线免费观看| a级黄色毛片免费播放视频| 国产亚洲人成在线影院| 亚洲一卡二卡三卡| 久久精品国产亚洲香蕉| 免费人成视频在线观看视频| 一本岛高清v不卡免费一三区| a级日本高清免费看| 日日狠狠久久偷偷色综合免费| 亚洲熟女综合色一区二区三区| 久久精品九九亚洲精品| 国产亚洲精品精华液| 亚洲精品亚洲人成在线观看下载| 成人看的午夜免费毛片| 精品女同一区二区三区免费站| 精品国产免费一区二区三区香蕉|