<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: 難以割舍的那份情感
    • 評論內容較長,點擊標題查看
    • --隔葉黃鶯

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲AV一宅男色影视| 免费在线观看你懂的| 免费在线中文日本| 久久综合九色综合97免费下载| 亚洲无码日韩精品第一页| 亚洲AV成人片色在线观看高潮| 亚洲a级片在线观看| 日本系列1页亚洲系列| 国产一精品一av一免费爽爽| 一个人看www在线高清免费看| 免费在线观看污网站| 一区二区三区免费在线视频| 天天影视色香欲综合免费| 免费国产真实迷j在线观看| 国产亚洲欧美日韩亚洲中文色| 四虎永久成人免费影院域名| 色婷婷六月亚洲婷婷丁香| 亚洲国产精品18久久久久久| 国产精品免费观看调教网| 亚洲成年人电影网站| 你懂的在线免费观看| 成人免费无码大片a毛片软件| 红杏亚洲影院一区二区三区| 亚洲中文字幕无码中文字| 好紧我太爽了视频免费国产| 亚洲国产成人久久精品动漫| 无码免费又爽又高潮喷水的视频| 亚洲一区二区三区偷拍女厕 | 亚洲美女视频免费| 黄色视频在线免费观看| 毛片免费观看的视频| 午夜在线亚洲男人午在线| 国产精品久久久久免费a∨| 337P日本欧洲亚洲大胆艺术图| 日日噜噜噜噜夜夜爽亚洲精品| 免费高清A级毛片在线播放| 日韩免费视频观看| 亚洲av乱码一区二区三区| 日产国产精品亚洲系列| 亚洲欧美日韩综合俺去了| 青青草国产免费久久久下载|