本帖最后由 余大麻 于 2019-3-21 11:26 编辑
装饰设计模式- 专门为解决某一类问题,而编写的固定格式的代码
- 装饰者固定结构:接口A,已知实现类C,需要装饰者创建代理类B
- 创建B,并实现A接口
- 提供B类的构造方法,参数类型为A,用于接收A接口的实现类C
- 给类B添加类型为A的成员变量,用于存放A接口的其他实现类
- 增强需要的方法
- 实现不需要增强的方法,方法体重调用成员变量存放的其他实现类对应的方法
- A接口的实现类C作为参数传递,需要增强C的某个方法,创建A接口实现类B包裹C,修改该方法,然后把B替代C作为参数传递
[Java] 纯文本查看 复制代码 A a = c;
B b = new B(c);
class B implement A {
private A a;
public B(A a) {
this.a = a;
}
//需要增强的方法
public void close() {
...
}
//需要增强的方法
public void commit() {
...
}
}
[Java] 纯文本查看 复制代码 //1.实现同一个接口Connection
public class MyConnection implements Connection {
//3.定义一个变量
private Connection conn;
private LinkedList<Connection> pool;
// 2.编写一个构造方法(参数使用了面相对象的多态特性)
public MyConnection(Connection conn,LinkedList<Connection> pool) {
this.conn=conn;
this.pool=pool;
}
//4.书写需要增强的方法
@Override
public void close() throws SQLException {
pool.add(conn);
}
/**
* 此方法必须覆盖!否则会出现空指针异常!!!
*/
@Override
public PreparedStatement prepareStatement(String sql) throws SQLException {
return conn.prepareStatement(sql);
}
}
|