<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 王永慶 閱讀(206) 評論(0)  編輯  收藏 所屬分類: HIBERNATE
    <2009年10月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    常用鏈接

    留言簿(1)

    隨筆分類

    隨筆檔案

    關注blogs

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 日本亚洲视频在线| 国产成人无码a区在线观看视频免费| 在线看无码的免费网站| 国产亚洲精品激情都市| 亚洲人成色在线观看| 香港a毛片免费观看| 中文字幕亚洲不卡在线亚瑟| 亚洲国产欧美一区二区三区| 亚洲精品在线免费观看| 精品亚洲麻豆1区2区3区| 成人A毛片免费观看网站| 国产精品亚洲精品日韩已方| 曰批免费视频播放在线看片二 | 国产免费av片在线看| 亚洲日本在线免费观看| 精品无码无人网站免费视频 | 国产精品亚洲va在线观看| 国产无遮挡吃胸膜奶免费看| 亚洲a∨国产av综合av下载| 搡女人免费视频大全| 在线观看亚洲免费| 全亚洲最新黄色特级网站| 国产亚洲美女精品久久久久| 亚洲精品无码av天堂| 在线观看免费无码视频| 精品日韩亚洲AV无码| 成人免费午夜在线观看| 久久人午夜亚洲精品无码区 | 午夜视频免费成人| 一级成人a免费视频| 亚洲久本草在线中文字幕| 成人免费黄色网址| 春意影院午夜爽爽爽免费| 久久精品亚洲视频| 在线观着免费观看国产黄| 黄色网站软件app在线观看免费 | 91免费国产精品| 羞羞的视频在线免费观看| 67pao强力打造67194在线午夜亚洲| 色婷婷7777免费视频在线观看| 国产精品亚洲精品日韩动图 |