当前位置: 首页> 学习园地

新mg电子游戏手机版实训-思想过度-连接池(五)-哈尔滨Java培训

2017-12-15 08:54:47更新

哈尔滨Java培训

思想过度-连接池(五)-装饰模式原理

 

目的:改写已存在的类的某个方法或某些方法,装饰设计模式(包装模式)

口诀:

1、编写一个类,实现与被包装类相同的接口。(具备相同的行为)

2、定义一个被包装类类型的成员变量。

3、定义构造方法,把被包装类的对象注入,给被包装类变量赋值。

4、对于不需要改写的方法,调用原有的方法。

5、对于需要改写的方法,写自己的代码。

1.包装Connection的实现类

//mysql的Connection类实现了sun公司的Connection的接口规范

//我们要包装的是mysql的Connection

//所以:我们写的这个包装类也要实现sun公司的Connection的接口规范--我们的类与mysql的Connection要具有相同的约束动作

//1.编写一个类,使之与被包装类实现相同的接口(具有相同的行为)

public class DecoratorConnection implements Connection{

 

private Connection oldConnection;   //2.添加一个被包装类的对象(依赖的关系)--实际上运行的时候传过来的是实现类的对象:com.mysql.jdbc.Connection的实例

private LinkedList<Connection> pool;

 

//3.定义构造方法,通过构造方法的参数,将被包装类注入,给被包装类赋值

       //实际上运行的时候传过来的是实现类的对象:com.mysql.jdbc.Connection的实例

public DecoratorConnection(Connection conn,LinkedList<Connection> pool){

this.oldConnection = conn;

this.pool = pool;

}

 

//5.需要改写的方法:自己写代码

@Override

public void close() throws SQLException {

//因为这里关闭连接也需要连接池的引用,所以,也必须把连接池注入到本类中

  pool.addLast(oldConnection);

}

//下面的方法不需要改变原有的功能,只以prepareStatement(String sql)为例,以下其它方法相同: //4.对于不需要改写的方法,调用原有的方法

@Override

public PreparedStatement prepareStatement(String sql) throws SQLException {

return oldConnection.prepareStatement(sql);

}

 //其它方法略……

}

哈尔滨Java培训