对象增强的手段(继承,装饰者模式,动态代理)

对象增强的手段

* 继承

 被增强的对象的增强的部分(指的是对象)是固定的

 被增强的对象的增强的内容(指的是对象)也是固定的

使用继承会使类增多!!!

class咖啡类 {}

class有糖咖啡extends 咖啡类 {}

class加奶咖啡extends 咖啡类 {}

class 加盐咖啡 extends 咖啡类 {}

class 加糖加奶 extends 加奶 {}

* 装饰者模式

1. 被增强的对象的增强的内容(指的是对象)是不能修改的!(永远加的都是缓冲区)

2. 被增强的对象的增强的对象(指的是对象)可以是任意的!

class咖啡类 {}

class有糖咖啡extends 咖啡类 {}

class加奶咖啡extends 咖啡类 {}

class加盐咖啡extends 咖啡类 {}

咖啡 a = new 加糖();

咖啡 b = new 加盐(a);//对a进行装饰,就是给a加盐

咖啡 c = new 加奶(b);//对b 进行装饰

装饰者模式

JavaAPI

IO流!

四大家:

1. 字节:InputStream、OutputStream

2. 字符:Reader、Writer

InputStream

FileInputSteram:它是节点流!就是和一个资源绑定在一起的!文件!

BufferedInputStream:它是装饰流!创建我是一定要给我一个底层对象,然后我不管你给我的是什么流,我都会给它添加缓冲区!

newBufferedInputStream(任意的InputStream)

FileInputStreamin = new FileInputStream("F:/a.jpg");

BufferedInputStreamb = new BufferedInputStream(in);//把输入流进行装饰,把输入流加上一个缓冲区

ObjectInputStreamo = new ObjectInputStream(b);

Connectioncon = ...

装饰:不知道被增强对象的具体类型时,可以使用!

1. 是你还有你,一切拜托你!

is a

has a

use a

 
  1. classMyConnection implements Connection {//是你也可以采用继承的方式

  2. // 还有你

  3. private Connection con;//底层对象,被增强对象

  4. public MyConnection(Connection con){//通过构造器传递底层对象!

  5. this.con = con;

  6. }

  7.  
  8. // 一切拜托你

  9. public Statement createStatement() {

  10. return con.createStatement();

  11. }

  12.  
  13. // 增强点

  14. public void close(){

  15. 把当前连接归还给池!

  16. }

  17. }

  18.  

Connection con = 通过四大参数创建连接对象!是由mysql提供的!

Connectioncon1 = new MyConnection(con);

con1.createStatement()

con.createStatement();

con1.close();

con.close();

* 动态代理(AOP)

 被增强的对象可以切换:Service

增强的内容也可以切换:事务处理

猜你喜欢

转载自blog.csdn.net/qq_20610631/article/details/81166120