装饰设计模式

130 阅读2分钟
装饰设计模式
  • 专门为解决某一类问题,而编写的固定格式的代码
  • 装饰者固定结构:接口A,已知实现类C,需要装饰者创建代理类B
  • 创建B,并实现A接口
  • 提供B类的构造方法,参数类型为A,用于接收A接口的实现类C
  • 给类B添加类型为A的成员变量,用于存放A接口的其他实现类
  • 增强需要的方法
  • 实现不需要增强的方法,方法体重调用成员变量存放的其他实现类对应的方法
  • A接口的实现类C作为参数传递,需要增强C的某个方法,创建A接口实现类B包裹C,修改该方法,然后把B替代C作为参数传递
[Java]
纯文本查看
复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
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]
纯文本查看
复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//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);
}
}

更多技术咨询可关注:gzitcast