对象增强的手段:
https://blog.csdn.net/weixin_38956287/article/details/80019580
1.继承
2.装饰者模式
3.动态代理
- 继承
被增强的对象固定的
增强的内容也是固定的 - 装饰者模式
被增强的对象是可以切换的
增强的内容是固定的 - 动态代理(AOP)
被增强的对象可以切换:Service
Java API
IO流!
四大家:
1. 字节:InputStream、OutputStream
2. 字符:Reader、Writer
InputStream
FileInputSteram:它是节点流!就是和一个资源绑定在一起的!文件!
BufferedInputStream:它是装饰流!创建我是一定要给我一个底层对象,然后我不管你给我的是什么流,我都会给它添加缓冲区!
new BufferedInputStream(任意的InputStream)
FileInputStream in = new FileInputStream(“F:/a.jpg”);
BufferedInputStream b = new BufferedInputStream(in);
ObjectInputStream o = new ObjectInputStream(b);
Connection con = …
装饰:不知道被增强对象的具体类型时,可以使用!只知道是某某类的子类,不知道这个类的具体类型.
- 是你还有你,一切拜托你!
is a
has a
use a
class MyConnection implements Connection {//是你
// 还有你
private Connection con;//底层对象,被增强对象
public MyConnection(Connection con){//通过构造器传递底层对象!
this.con = con;
}
// 一切拜托你
public Statement createStatement() {
return con.createStatement();
}
// 增强点
public void close(){
把当前连接归还给池!
}
}
Connection con = 通过四大参数创建连接对象!是由mysql提供的!
Connection con1 = new MyConnection(con);
con1.createStatement()
con.createStatement();
con1.close();
con.close();
装饰者模式的代码样式:
- 父类是一个接口实现类,
- 给父类传递一个对象[子类的有参构造里面,传递对象,构造方法体写super(对象名)],
- 直接使用父类里面的方法.