老方数据库连接池-包装设计模式

有时候一个对象的方法可能不是我们想要的功能,我们希望能将这个方法覆写。而对于覆写,我们最直白的感觉就是通过子类继承的方式,但是有时候对于使用web开发而言,我们能知道获取对象的实现接口,而真正对象是属于哪个类我们并不知道,例如Connection接口,HttpServletResponse接口这样的,我们并不知道第三方Jar包或者别的框架具体的实现类,那么我们只能通过已知的接口方式来增强或改写某个对象的方法。

通常增强某个对象方法的方式有三种:

⑴ 使用子类继承某个实现类;

⑵ 使用包装设计模式;

⑶ 使用动态代理。

本篇主要讲解包装设计模式,但要知道动态代理是最佳的解决方法。

包装设计模式主要有如下五个步骤:

① 自定义一个类,实现与目标对象(被增强对象)相同的接口。

② 在自定义的类中定义一个成员变量,来记住(指向)目标对象。

③ 定义一个构造函数,用来接收目标对象。

④ 覆盖想增强或改写的方法。

⑤ 对于其他不想增强或改写的方法,使用刚才记住目标对象的成员变量来一一调用目标对象的方法即可。

以数据库连接的Connection接口为例,我们在数据库连接池中给其他方法的Connection对象必须不能是数据库直接提供的Connection对象,因为其close方法会将连接直接销毁,而我们应该返回的是调用close方法能将连接重新放回池子中的Connection对象,所以我们使用一个包装类来封装数据库提供的Connection对象,覆写其close方法,对于其他方法,则直接使用原来的对象去调用,代码如下:

class MyConnection implements Connection{  //包装设计模式的类
        private Connection conn;
        public MyConnection(Connection conn) {  //接收目标对象
            this.conn = conn;
        }

        @Override
        public void close() throws SQLException {
            connectionList.addFirst(this.conn);  //调用close方法时只是将连接重新返回池中,而不会销毁
    }

@Override
        public Statement createStatement() throws SQLException {
            this.conn.createStatement();  //对于不增强的方法则调用目标对象的方法即可,在MyConnection包装类中其他方法都是这样的
            return null;
    }
    。。。  //以下省略Connection接口中覆写的其他方法,对于不想增强的方法都如上(createStatement方法)所示
}    // MyConnection包装类完成

源自老方笔记

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值