增強一個Java類中的某個方法的幾種方式


 

    * 一種方式:繼承的方式.

        * 能夠控制這個類的構造的時候,才可以使用繼承.

Connection是一個接口,實現類不確定(由各廠商提供),無法使用此方法

    * 二種方式:裝飾者模式方式.

        * 包裝對象和被包裝的對象都要實現相同的接口.

        * 包裝的對象中需要獲得到被包裝對象的引用.

        ***** 缺點:如果接口的方法比較多,增強其中的某個方法.其他的功能的方法需要原有調用.

    * 三種方式:動態代理的方式.

        * 被增強的對象實現接口就可以.

【繼承和裝飾者的案例】

/**

 * 繼承的方式增強一個類中某個方法:

 */

class Man{

public void run(){

System.out.println("....");

}

}

 

class SuperMan extends Man{

public void run(){

// super.run();

System.out.println("....");

}

}

 

/**

 * 使用裝飾者的方式完成類的方法的增強

 */

interface Waiter{

public void server();

}

 

class Waiteress implements Waiter{

 

@Override

public void server() {

System.out.println("服務...");

}

 

}

 

class WaiteressWrapper implements Waiter{

    private Waiter waiter;

 

public WaiteressWrapper(Waiter waiter) {

     this.waiter = waiter;

}

 

@Override

public void server() {

System.out.println("微笑...");

// this.waiter.server();

 

}

 

}

【使用裝飾者模式增強Connectionclose方法】

public class MyConnection implements Connection{

 

private Connection conn;

private List<Connection> list;

 

public MyConnection(Connection conn,List<Connection> list) {

this.conn = conn;

this.list = list;

}

 

 

@Override

public void close() throws SQLException {

list.add(conn);

}
     ...

}

 

連接池的getConnection方法:
@Override

// 獲得連接的方法:

public Connection getConnection() throws SQLException {

if(list.size() <= 0){

for(int i=1;i<=3;i++){

Connection conn = JDBCUtils.getConnection();

list.add(conn);

}

}

Connection conn = list.remove(0);

MyConnection myConn = new MyConnection(conn, list);

return myConn;

}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM