继承 需要明确父类
实现 需要明确父接口(不明确实现类的父接口)
动态代理 proxy
装饰者设计模式
什么是设计模式:一段固定的代码 解决固定的问题
A a = C....
B b = new B( a )
我们目的:对Connection中的close进行增强 明确Connection
装饰者设计模式:对Connection进行包装,形成新的NewConnection,程序员想使用close 需要从连接池中
拿到新的连接,第一次向连接池中放数据时 放新连接
伪代码:
A a = C....
Connection conn = DriverManager.getConnection.....
B b = new B( a )
MyConnection myConn = new MyConnection( conn )
pool.add(myConn);
Connection MyConnection MyConnection其实是对Connection
/**
* A a = C...
* B b = new B( a );
*
* 1.创建MyConnection 实现Connection
* 2.准备有参构造(第一个参数传入conn,第二个参数传入连接池对象)
* 3.提供成员变量 接收外部传入需要包装的 conn
* 4.需要重写的方法(需要增强) close()
* 5.不需要增强的方法
*/
public class MyConnection implements Connection{
private LinkedList<Connection> pool;
private Connection conn;//父类的 传进来的目的: 调用以前的方法 从而不进行重写
public MyConnection(Connection conn , LinkedList<Connection> pool){
this.conn = conn;
this.pool = pool;
}
/**
* 需要增强的方法
*/
@Override
public void close() throws SQLException {
//将包装后的连接归还给连接池
//this对象 当前调用对象 new出来的 new的是谁 this代表谁
pool.add(this);
}
/**
* 外部调用 conn.rollback()
*
*
*
* 代码myConn.rollback() 不重写 super.rollback();使用原来的对象 conn.rollback()
*/
/**
* * 不需要增强的方法
*/
@Override
public void rollback() throws SQLException {
conn.rollback();
}
}