码迷,mamicode.com
首页 > 编程语言 > 详细

增强一个Java类中的某个方法的几种方式

时间:2017-03-30 22:49:22      阅读:545      评论:0      收藏:0      [点我收藏+]

标签:override   interface   相同   his   比较   public   int   模式   对象   

 

    * 一种方式:继承的方式.

        * 能够控制这个类的构造的时候,才可以使用继承.

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;

}

 

增强一个Java类中的某个方法的几种方式

标签:override   interface   相同   his   比较   public   int   模式   对象   

原文地址:http://www.cnblogs.com/a234/p/6648832.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!