<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

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲天堂中文字幕| 日韩va亚洲va欧洲va国产| 亚洲另类古典武侠| 99re这里有免费视频精品| 亚洲国产精品无码AAA片| a在线视频免费观看| 亚洲大尺度无码专区尤物| 成人无码视频97免费| 国产亚洲AV无码AV男人的天堂| 国产视频精品免费视频| 黑人大战亚洲人精品一区| 两个人看的www免费| 亚洲av永久无码精品古装片 | 中文字幕人成无码免费视频| 亚洲卡一卡2卡三卡4麻豆| 免费被黄网站在观看| 美女视频黄频a免费观看| 亚洲综合国产一区二区三区| 国产精品免费看久久久 | 亚洲尹人九九大色香蕉网站| 亚洲毛片免费观看| 亚洲日韩精品无码专区加勒比☆ | 天天天欲色欲色WWW免费| 国产成人+综合亚洲+天堂| 久久精品亚洲福利| 亚洲成人在线免费观看| 久久亚洲欧美国产精品| 亚洲热妇无码AV在线播放| 91精品视频在线免费观看| 亚洲日韩精品无码专区加勒比| 亚洲国产日韩成人综合天堂| 日韩精品无码免费专区午夜| 亚洲av成人综合网| 亚洲成人高清在线| 每天更新的免费av片在线观看| 久久久久久亚洲精品无码| 久久亚洲国产欧洲精品一| 在线观看日本免费a∨视频| h视频在线免费观看| 国产色在线|亚洲| 久久影视国产亚洲|