Decorator模式在JAVA中的IO应用

解决若依Vue3前后端分离---路由切换时显示白屏 解决基于Vue3若依前后端分离项目中出现的路由正常切换但是就是不显示数据的问题,也就是不发起网络请求的问题。 阅读详情

 OutputStream是一个抽象类,它是所有输出流的公共父类,其源代码如下:

 

以下是代码片段:



它定义了write(int b)的抽象方法。这相当于Decorator模式中的Component类。

ByteArrayOutputStream,FileOutputStream 和 PipedOutputStream 三个类都直接从OutputStream继承,以ByteArrayOutputStream为例:

 

以下是代码片段:
  


它实现了OutputStream中的write(int b)方法,因此我们可以用来创建输出流的对象,并完成特定格式的输出。它相当于Decorator模式中的ConcreteComponent类。

接着来看一下FilterOutputStream,代码如下:

 

以下是代码片段:

 

     同样,它也是从OutputStream继承。但是,它的构造函数很特别,需要传递一个OutputStream的引用给它,并且它将保存对此对象的引用。而如果没有具体的OutputStream对象存在,我们将无法创建FilterOutputStream。由于out既可以是指向FilterOutputStream类型的引用,也可以是指向ByteArrayOutputStream等具体输出流类的引用,因此使用多层嵌套的方式,我们可以为ByteArrayOutputStream添加多种装饰。这个FilterOutputStream类相当于Decorator模式中的Decorator类,它的write(int b)方法只是简单的调用了传入的流的write(int b)方法,而没有做更多的处理,因此它本质上没有对流进行装饰,所以继承它的子类必须覆盖此方法,以达到装饰的目的。

      BufferedOutputStream 和 DataOutputStream是FilterOutputStream的两个子类,它们相当于Decorator模式中的ConcreteDecorator,并对传入的输出流做了不同的装饰。以BufferedOutputStream类为例:


以下是代码片段:

这个类提供了一个缓存机制,等到缓存的容量达到一定的字节数时才写入输出流。首先它继承了FilterOutputStream,并且覆盖了父类的write(int b)方法,在调用输出流写出数据前都会检查缓存是否已满,如果未满,则不写。这样就实现了对输出流对象动态的添加新功能的目的。
   下面,将使用Decorator模式,为IO写一个新的输出流。


自己写一个新的输出流
   了解了OutputStream及其子类的结构原理后,我们可以写一个新的输出流,来添加新的功能。这部分中将给出一个新的输出流的例子,它将过滤待输出语句中的空格符号。比如需要输出"java io OutputStream",则过滤后的输出为"javaioOutputStream"。以下为SkipSpaceOutputStream类的代码:


以下是代码片段:

它从FilterOutputStream继承,并且重写了它的write(int b)方法。在write(int b)方法中首先对输入字符进行了检查,如果不是空格,则输出。


以下是一个测试程序:


以下是代码片段:

执行以上测试程序,将要求用户在console窗口中输入信息,程序将过滤掉信息中的空格,并将最后的结果输出到console窗口。比如:

 

以下是引用片段:
Please input your words:
a b c d e f 
abcdef


总   结

在java.io包中,不仅OutputStream用到了Decorator设计模式,InputStream,Reader,Writer等都用到了此模式。而作为一个灵活的,可扩展的类库,JDK中使用了大量的设计模式,比如在Swing包中的MVC模式,RMI中的Proxy模式等等。对于JDK中模式的研究不仅能加深对于模式的理解,而且还有利于更透彻的了解类库的结构和组成。


本文来自优快云博客,转载请标明出处:http://blog.youkuaiyun.com/mobilechannel/archive/2005/12/14/551960.aspx

rk3568 rk628桥片hdmi转lvds RK628 是瑞芯微全新推出的视频桥接芯片,支持丰富的显示接口,支持高分辨率大屏产品转换需求。基于DRM、FB的显示框架易于使用。 输入信号支持:HDMI、RGB、BT.1120,输出信号支持 HDMI、GVI、Dual LVDS、Dual MIPI、MIPI-CSI、RGB、BT.1120,最高支持4K 60fps 输入/输出转换,并且支持输入到输出 1/4~4倍的缩放。 阅读详情

相关推荐

海康视觉平台VisionMaster实战入门:从通讯配置到工具应用

本文为海康VisionMaster视觉平台实战入门指南,详细介绍了从软件安装准备、与PLC等外部设备的通讯配置,到匹配定位、测量、畸变矫正等核心工具的应用方法。通过实战案例拆解,帮助工程师快速掌握如何搭建完整的机器视觉检测与引导定位系统,实现工业自动化项目落地。

weixin_29224309的博客 1009

decorator在java中_Decorator模式在JAVA中的IO应用

OutputStream是一个抽象类,它是所有输出流的公共父类,其源代码如下:以下是代码片段:public abstract class OutputStream implements Closeable, Flushable {public abstract void write(int b) throws IOException;...}它定义了write(int b)的抽象方法。这相当于De...

weixin_34058060的博客 143

鸿蒙ijkplayer播放器调优实战:从卡顿掉帧到流畅播放RTSP,我都调了哪些参数?

本文深入解析鸿蒙平台上ijkplayer播放器优化RTSP流媒体播放的关键参数,解决卡顿、掉帧等问题。通过调整缓冲区管理、帧处理策略和网络超时设置,实现流畅播放体验,特别适用于监控和直播等高实时性场景。

weixin_29304021的博客 240

Decorator模式在java.io包中的应用

JDK为程序员提供了大量的类库,而为了保持类库的可重用性,可扩展性和灵活性,其中使用到了大量的设计模式,本文将介绍JDK的I/O包中使用到的Decorator模式,并运用此模式,实现一个新的输出流类。   Decorator模式简介   Decorator模式又名包装器(Wrapper),它的主要用途在于给一个对象动态的添加一些额外的职责。与生成子类相比,它更具有灵活性。    有时候,我们需要为

leagle 873

【墨者学院 】uWSGI 漏洞复现(CVE-2018-7490)

0x01 漏洞详情 uWSGI是一款Web应用程序服务器,它实现了WSGI、uwsgi和http等协议。 uWSGI 2.0.17之前版本中存在路径遍历漏洞,该漏洞源于程序没有正确的处理DOCUMENT_ROOT检测。攻击者可通过发送带有‘…’序列的特制URL请求利用该漏洞查看系统上的任意文件。 uWSGI 2.0.17之前版本中存在路径遍历漏洞,该漏洞源于程序没有正确的处理DOCUMENT_RO...

Summer's blog 1万+

CiteSpace基础操作(CNKI数据的导入分析)(一)

1 Cite Space简单介绍 2 文献导入 2.1 打开知网,选择高级检索

m0_50990607的博客 5万+

Java IO 流:从字节到字符再到Java 装饰者模式(Decorator Pattern),解析与应用掌握数据流动的艺术

在 Java 编程中,IO(输入输出)流是处理数据输入输出的核心工具。无论是读取文件、网络通信,还是处理用户输入,IO 流都扮演着重要角色。本文将深入探讨 Java IO 流的核心概念、分类、经典代码实例及其应用场景,帮助你全面掌握数据流动的艺术。

keshi12354的博客 1409

STM32CubeMX定时器进阶玩法:用编码器模式实现电机转速测量(附避坑清单)

本文详细介绍了如何使用STM32CubeMX配置定时器的编码器模式实现电机转速测量,包括硬件连接、CubeMX配置关键步骤、转速计算算法及常见问题解决方案。特别针对工业控制和机器人开发中的高精度需求,提供了实用的避坑清单和优化技巧,帮助开发者高效完成项目。

joy55的博客 203

三 装饰模式的应用从Decorator,Adapter模式看Java/IO库(二)

三 装饰模式的应用 装饰器模式:在不用继承的情况下,通过对原来对象的引用,动态的添加对象的功能. 例如:java IO 里面的  filterInputStream :引用了inputStream ,通过动态封装,生成了具有新的功能的datainputStream,StringBufferInputStream. filterOutPutStream ,filterWriter,filte

For that dream 1006

SKUA-GOCAD入门教程-第六节

DisplayElements窗口是用于浏览和处理项目数据的工具,包含多个数据浏览器,如模型列表、对象、未分类对象、属性数据及资源数据。

江洋大葱的博客 983

华为OD机试真题 新系统 2026-04-22 C++ 实现【小学生班长选举增强版】

9 月份开学第一天,小学某班级进行班长选举活动,班级共有 N 个学生,每个学生最多可投 3 票(对同一个人只能投一票),也可以弃权不投票,大家投票时写上对应学生的名字。 假设学生不存在重名。考虑到部分少数民族名字带分隔,且整体较长,同学在投票时为了方便,允许同学写全称,也可以只写其中的部分连续段。 例如班级里只有 2 个少数民族名称带点的同学:

MISAYAONE的博客 167

java设计模式之Decorator与Adapter

JAVA IO 设计模式彻底分析   我想任何一本介绍模式的书在讲到Decorator模式的时候不能不提到它的实际应用——在Java/IO库里面的应用,<<Java与模式>>这本书也不例外,有点不一样的是,这本书在介绍的时候有个专题,是从两个模式来看Java/IO库,完这个专题后,个人感觉对Java/IO库有了全新的认识同时也加深了Decorator模式跟Adapter适...

yedehua的专栏 180

VS中的C#项目怎样引入另一个项目

场景 在C#项目A中需要引用项目B。 实现 将项目B手动复制到A所在的项目目录下的同一个解决方案中,即与项目A同级的目录下。 在VS中打开项目B,打开解决方案资源管理器--右击解决方案--添加--现有项目 然后找到项目B的.csproj文件打开。 然后看到资源管理器中已经将B添加进来了 点击项目A的引用-右键-添加 将项目下的解决方...

BADAO_LIUMANG_QIZHI的博客 9320

JAVA IO 设计模式彻底分析

我想任何一本介绍模式的书在讲到Decorator模式的时候不能不提到它的实际应用--在Java/IO库里面的应用,<< Java与模式>>这本书也不例外,有点不一样的是,这本书在介绍的时候有个专题,是从两个模式来看Java/IO库,完这个专题后,个人感 觉对Java/IO库有了全新的认识同时也加深了Decorator模式跟Adapter适配器模式的理解,现和大家分享下这个在...

锲而不舍 金石可錄 798

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

从Java类库看设计模式3

http://www-128.ibm.com/developerworks/cn/java/l-jdkdp/part3/index.html关于Bridge模式:Abstraction中有一个Implementor的引用,client直接调用RefinedAbstraction,屏蔽了实现的细节通常的,可以在实现部分定义一些基本的原子方法,而在抽象部分则通过组合定义在实现层次中的原子方法实现系统的

abyss_qwiz的专栏 1035

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Decorator Pattern和Java IO

Decorator之前 在Java程序中,我们常会在IO的时候用到类似于如下的代码:   InputStream in = new BufferedInputStream( new FileInputStream("test.txt"));   从代码本身的直观意义来说,这部分代码很好理解。 1.使用FileInputStream打...

点缀星辰 245

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Java IO 装饰类新说

我不知道各位是师弟师妹们学java时是怎样的,就我的刚学java时的感觉,java.io包是最让我感到一头雾水的。所以现在这篇文,尽可能简单地描述java.io包的结构,希望对java.io同样一头雾水的师弟师妹们有些帮助^_^ 我开始学java时,java.io的介绍是在《java编程思想》里看的。说实话,当时完全看不明白——“java.io的是用‘decorator模式’来构建的”——刚

hopehe888999的专栏 720

装饰设计模式(decorator)与IO包

要明白java.io,确实需要理解decorator设计模式,下面详细介绍下。所谓decorator,装饰,其实可以说是一种设计的技巧,说白了没什么难的,别看很多网上资料说的天花乱坠的(非常讨厌有些文章总是把简单的问题描述得跟两头猪的kiss问题一样复杂……)。decorator的结构如下:    MyInterface       |_______|_______|             | Myclass     Decorator          ____|_____          |    

夏风 603

java io的设计模式_Java IO 中的设计模式

引言:单纯学设计模式和Java类库的学习效果都不会很好。设计模式和Java类库的关系就好像九阴真经和北斗阵法的关系,一个是练功原理,一个是用原理实现的招式,郭靖在轩辕台上忘记危险而专注思考就是领悟到了其中的两者结合而来的妙处。设计模式这样的东西(增加开发时间和成本,提高可扩展性和可维护性),只有运用在基础类库中才能体现出他的价值,设计模式是用来打基础的,现实中的项目如果用设计模式难免会出现费力不讨...

weixin_39652658的博客 357

设计模式之Decorator

在设计的过程中,经常会遇到IS-A和HAS-A的问题,相应的UML图也就有很大的区别,一个是继承,一个是组合。 这样的问题很难给出明确的答案,只能是根据实际的需求,结合项目规模来确定最后的设计原则。 当你发觉使用继承来扩展对象的功能会带来一些问题,例如: 1)扩展缺乏灵活性 2)子类膨胀 这个时候,你可以考虑使用组合的办法,而Decorator是一种很有效的组合模式。 类继承是静态扩展...

weixin_30699443的博客 60

JAVA IO 设计模式彻底分析(转)

一.引子(概括地介绍Java的IO)  无论是哪种编程语言,输入跟输出都是重要的一部分,Java也不例外,而且Java将输入/输出的功能和使用范畴做了很大的扩充。它采用了流的机制来实现输入/输出,所谓流,就是数据的有序排列,而流可以是从某个源(称为流源或Source of Stream)出来,到某个目的地(称为流汇或Sink of Stream)去的。由流的方向,可以分成输入流和输出流,...

iteye_10588的博客 176

【转】JAVA IO 设计模式彻底分析

  我想任何一本介绍模式的书在讲到Decorator模式的时候不能不提到它的实际应用——在Java/IO库里面的应用,<<Java与模式>>这本书也不例外,有点不一样的是,这本书在介绍的时候有个专题,是从两个模式来看Java/IO库,完这个专题后,个人感觉对Java/IO库有了全新的认识同时也加深了Decorator模式跟Adapter适配器模式的理解,现和大家分享下这个...

李思苇 117

设计模式系列--Decorator

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34194359的博客 82

《图解设计模式》笔记(五)一致性

11.Composite模式:容器与内容的一致性 12.Decorator 模式:装饰边框与被装饰物的一致性

冰可乐味儿的深哥哥、 1205

Java IO 体系(一): 装饰者模式

注意: 关键点!!!@OverrideSystem.out.println(“我是一个孤独的人”);@Override@OverrideSystem.out.println(“穿RShoes”);@OverrideSystem.out.println(“穿TShirt”);测试2. 装饰者模式之IO中的应用流式部分——最主要的部分。如:OutputStream、InputStream、Writer、Reader等。

2401_89758384的博客 723

从Java类库看设计模式 5

在使用Java中的IO类库的时候,是不是快要被它那些功能相似,却又绝对可称得上庞杂的类搞得要发疯了?或许你很不明白为什么要做这么多功能相似的几十个类出来,这就是Decorator模式将要告诉你的了。    在IO处理中,Java将数据抽象为流(Stream)。在IO库中,最基本的是InputStream和OutputStream两个分别处理输出和 输入的对象(为了叙述简便起见,这儿只涉及字节...

。。。。。。。 96
上一篇: 一对一,一对多,多对多,关系
下一篇: Google Apps becomes Chromebook sales channel
easyjsf
博客等级 码龄17年 19粉丝 82原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值