4 自定义连接池的实现:
编写一个类实现DataSource接口
重写getConnection方法,
初始化提供多个连接,存在内存中(定义一个集合,用于存储连接对象)
获取连接 connection conn = 集合对象.remove() ;获得移出的连接对象
归还连接 connlist.add(conn);将移出的连接对象 重新添加到连接集合中
编写归还的连接方法
5 自定义连接池经常出现的问题:
使用接口的实现类完成的构造
MyDataSource mds = new MyDataSource(); 这种方法不方便程序的扩展
额外提供了方法归还连接
dataSource.addBack(conn);
提供额外的方法,增加用户使用难度
如果不提供自定义方法,通过什么将连接归还到连接池那?解决思路:原来connection中有一个close方法,close方法完成了连接的销毁。将原有 的close的销毁逻辑修改为归还。(增强一个类中的方法。第一 可以采用继承的方式 )
增强一个类中的方法。第一可以采用继承的方式 :继承是增强中最简单的方法,使用条件是:必须能够控制这个类的构造!
第二:采用装饰者模式:(静态代理)
步骤:先写一个类实现与被装饰类相同的接口。然后在类中创建一个指向被修饰对象的引用。不需要增强的方法直接调用被装饰对象的方法(可以使用继承包装类的)。需要增强的方法直接进行增强。
装饰者模式的使用条件:增强的类和被增强的类要实现相同的接口。在增强的类中获得被增强类的引用
原始接口:
interface Waiter{
public void server();
}
被增强的类
public class Waitress implements Waiter{
public void server(){
System.out.println(“服务中…”);
}
}
增强的类(必须拥有被增强的对象的引用)
(必须实现被增强类同样的方法)
public class WaiterWrapper implements Waiter{
private Waiter waiter; (定义属性)
public Waitress(Waiter waiter){ (使用引用)
this.waiter = waiter; (
}
public void server(){
System.out.println(“微笑…”);
waiter.server();
}
}
第三:动态代理的方式:最灵活的,写法是最复杂的!