设计模式—装饰者模式

来源:互联网 发布:在淘宝上面卖什么好 编辑:程序博客网 时间:2024/06/06 02:50
  装饰模式Decorator:动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更加灵活。

  当想要对已有的对象进行功能的增强时,可以定义类,将已有的对象传入,基于已有的功能,并提供加强功能,那么自定义的该类称为装饰类

  装饰类通常会通过构造方法接收被装饰的对象,并基于被装饰的对象的功能,提供更强的功能

 

 

对象增强的手段

  1继承

      被增强的对象固定的

      增强的内容也是固定的

  2装饰者模式

      被增强的对象是可以切换的

      增强的内容是固定的

  3动态代理(AOP

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

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

 

继承:  

  缺点:1.增强的内容是死的,不能动! (要么加糖 要么加盐即要加的内容是死得

     2. 被增强的对象也是死的!  (只能给纯咖啡里面加东西)

  使用继承会使类增多!

 

    class 咖啡类 {}

    class 有糖咖啡 extends 咖啡类{}

    class 加奶咖啡 extends 咖啡类{}

    class 加盐咖啡 extends 咖啡类{}

 

 

装饰者模式   

  1. 增强的内容是不能修改的!(要么加糖 要么加盐即要加的内容是死得

  2. 被增强的对象可以是任意的! (给我什么东西,我就往那里加东西)

 

    class 咖啡类 {}

    咖啡 a = new加糖();

    咖啡 b = new加盐(a);  //a进行装饰,将加糖的咖啡再加盐

    咖啡 c = new加奶(b);  //b进行装饰,即将加糖加盐的咖啡再加奶

 

 

装饰者模式的应用:   

  Java API 、  IO流!

 

  四大家

    1. 字节:InputStreamOutputStream

    2. 字符:ReaderWriter

 

  InputStream

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

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

 

  new BufferedInputStream(任意的InputStream)

 

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

  BufferedInputStream b = new BufferedInputStream(in);

  ObjectInputStream o = new ObjectInputStream(b);





 

原创粉丝点击