美文网首页
装饰者模式--经典的io流

装饰者模式--经典的io流

作者: 半吊子a | 来源:发表于2020-11-07 20:21 被阅读0次

装饰者模式--在不改变现有对象结构的情况下,动态地给该对象增加一些职责的模式

优点:继承的有力补充,遵守开闭原则
缺点:增加很多子类,过度使用会增加程序复杂性

抽象构件角色(component) 抽象类或者接口,定义一系列方法,由子类去实现
具体构件角色 (concrete component) component的子类,实现它的方法
装饰角色(decorator)component的子类,持用component的引用,它的主要作用是客户端的调用委派到被装饰类
具体装饰角色(concrete decorator)decorator子类,也是component的子类

image.png

IO流是比较经典的装饰者模式

image.png

抽象构件角色 InputStream 定义read、available等方法
具体构件角色 FileInputStream(文件的读取)PipedInputStream ByteArrayInputStream
ObjectInputStream(反序列化) StringBufferInputStream
装饰角色 FilterInputStream 比较特殊的子类,里面有InputStream,什么也不做,就转换调用一下inputStream引用的方法
具体装饰角色 DataInputStream(对更多数据类型进行输入) BufferedInputStream(缓存) PushbackInputStream

InputStream抽象类


image.png

FileInputStream类


image.png

FilterInputStream类


image.png

BufferedInputStream类


image.png
getInIfOpen方法中取到ipnutstream引用

实例化一个具有缓存功能的字节流对象时,只需要在 FileInputStream 对象上再套一层 BufferedInputStream 对象即可。

FileInputStream fileInputStream = new FileInputStream(filePath);
BufferedInputStream bufferedInputStream = new BufferedInputStream(fileInputStream);

相关文章

  • 装饰者模式--经典的io流

    装饰者模式--在不改变现有对象结构的情况下,动态地给该对象增加一些职责的模式 优点:继承的有力补充,遵守开闭原则缺...

  • java基础之IO流(设计模式)

    java IO流的设计是基于装饰者模式&适配模式,面对IO流庞大的包装类体系,核心是要抓住其功能所对应的装饰类。 ...

  • 装饰者设计模式-RecyclerView添加头部和底部

    引言 装饰者设计模式,装饰者设计模式在Android系统源码中也能经常见到,如IO流、ContextWrapper...

  • java IO 的知识总结

    装饰者模式 因为java的IO是基于装饰者模式设计的,所以要了解掌握IO 必须要先清楚什么事装饰者模式(装饰者模式...

  • Android里一个装饰者模式的应用场景——给RecyclerV

    Java中最常见的装饰者模式应用就是IO流的设计了。先简单回顾一下装饰者模式: 装饰者模式的思想就是在被包装者原有...

  • 设计模式详解——装饰者模式

    本篇文章介绍一种设计模式——装饰者模式。装饰者模式在Java中的典型应用就是IO流,在本篇文章中将有详细介绍。本篇...

  • 装饰者模式——IO流运用

    推荐博客Java设计模式学习09Java设计模式学习09Java设计模式学习09 装饰者模式还是比较难懂的。。。。...

  • Java装饰者设计模式

    装饰者设计模式 使用场景: 给某个对象的功能进行扩展时,可以考虑使用装饰者设计模式。 在IO流这部分内容中,JDK...

  • IO流中的装饰者模式初探

    以上一篇中的代码为例: Java中的IO流设计:使用装饰者模式:要在InputStream外面套上一层InputS...

  • java成长阶段

    1:io流(包装模式)装饰者模式 2:熟悉linux操作系统 3:计算机网络 4:java语言特性 5:后台技术长...

网友评论

      本文标题:装饰者模式--经典的io流

      本文链接:https://www.haomeiwen.com/subject/lbeqbktx.html