Java开发模式之装饰者(Decorator)模式
2016/4/27 20:21:02 Seventeen Wen
对象增强的手段:
- 继承
- 装饰者模式
- 动态代理
什么时候使用装饰模式?
- 需要扩展一个类的功能,或者给一个类加附加责任。
- 需要动态地给一个对象增加功能,这些功能可以再动态地撤销。比如给文件加密的操作。
需要增加有一些基本功能的排列组合而产生的非常大量的功能,从而是继承关系变得不现实。
class 配料类{} class 腊肠 extends 配料类{} class 肥牛 extends 配料类{} class 蛋 extends 配料类{} 配料 a = new 腊肠(); 配料 b = new 肥牛(a);// 加腊肠和加肥牛 配料 c = new 蛋(b);//加腊肠,加肥牛和加蛋
DBPC中的应用
package com.seventeenwen.decorator
// 这个类实现了Connection接口,有Connection的所有方法
public class ConnectionWrapper implements Connection{
// 底层对象,需要被增强的对象
protected Connection con;
//通过构造器来传递底层对象
public ConnectionWrapper(Connection con){
this.con = con
}
public void close() throws SQLException{
con.close();
}
.......
.......
}
----------------------------------------------------------------------
package com.seventeenwen.decorator
public class MyConnection extends ConnectionWrapper{
public MyConnection(Connection con){
super(con);
}
public void close() throws SQLException{
system.out.print("增强的close()");
super.close();
}
}
Connection con = dataSource.getConnection();
Connection con1 = new MyConnection(con);
//调用普通的Close()
con.Close();
//调用增强的Close();
con1.Close();