Java IO 设计模式总结

news/2024/12/29 14:08:33/

Java IO设计模式总结

一、装饰器模式

装饰器模式(Decorator)可以在不改变原有对象的情况下拓展其功能。装饰器模式通过组合替代继承来扩展原始类的功能,在一些继承关系比较复杂的场景(IO这一场景各种类的继承关系就比较复杂)更加实用。

对于字节流来说,FilterInputStream(对应输入流)和FilterOutputStream(对应输出流)是装饰器模式的核心,分别用于增强InputStream和OutputStream子类对象的功能。

  • 装饰器模式很重要的一个特征,那就是可以对原始类嵌套使用多个装饰器。为了实现这一效果,装饰器类需要跟原始类继承相同的抽象类或者实现相同的接口。

二、适配器模式

适配器(Adapter Pattern)模式主要用于接口互不兼容的类的协调工作,可以将其联想到我们日常经常使用的电源适配器。

适配器模式中存在被适配的对象或者类称为适配者,作用于适配者的对象或者类称为适配器。适配器分为对象适配器和类适配器。类适配器使用继承关系实现,对象适配器使用组合关系来实现。IO流中的字符流和字节流的接口不同,它们之间可以协调工作就是基于适配器模式来做的,是对象适配器。通过适配器,我们可以将字节流对象适配成一个字符流对象,这样我们可以直接通过字节流对象来读取或者写入字符数据。

  • 适配器模式和装饰器模式有什么区别?

装饰器模式更侧重于动态地增强原始类的功能,装饰器类需要跟原始类继承相同的抽象类或者实现相同的接口。并且,装饰器模式支持对原始类嵌套使用多个装饰器。

适配器模式更侧重于让接口不兼容而不能交互的类可以一起工作,当我们调用适配器对应的方法时,适配器内部会调用适配者或者和适配类相关的类的方法,这个过程透明的。

三、工厂模式

工厂模式用于创建对象,NIO(New IO)中大量用到了工厂模式,比如Files类的newInputStream方法用于创建InputStream对象(静态工厂)、Paths类的get方法创建Path对象(静态工厂)、ZipFileSystem类的getPath的方法创建Path对象(简单工厂)。

四、观察者模式

NIO中的文件目录监听服务使用到了观察者模式。

NIO中的文件目录监听服务基于WatchService接口和Watchable接口。WatchService属于观察者,Watchable属于被观察者。

Watchable接口定义了一个用于将对象注册到WatchService(监控服务)并绑定监听事件的方法register


http://www.ppmy.cn/news/93507.html

相关文章

使用git远程上传github

如果你不是很熟悉git,在使用git前请先对你的项目进行备份 进入本地文件目录,打开git的cmd界面(Git Bash Here)如果当面目录使用过git,有.git隐藏文件,则跳过第二步,没有则输入以下命令 git ini…

再获数千万元追加投资!宏景智驾B轮总融资已近「5亿元」

5月26日,宏景智驾(Hyperview)宣布获得阿美风险投资(Aramco Ventures)旗下多元化成长基金Prosperity7 Ventures数千万元的追加投资,这也是继2022年2月Prosperity7独家投资宏景智驾超亿元战略融资后又一次投出…

小航编程题库机器人等级考试理论一级(2023年03月) (含题库教师学生账号)

需要在线模拟训练的题库账号请点击 小航助学编程在线模拟试卷系统(含题库答题软件账号)_程序猿下山的博客-CSDN博客 单选题2.0分 删除编辑 答案:B 第1题关于使用动滑轮说法正确的是?( ) A、是否省力与动滑轮的颜色…

奇巴布Feed流性能优化

01 项目背景 “爱奇艺奇巴布”是爱奇艺为0-8岁孩子和家长定制化设计的寓教于乐平台,为儿童量身打造精致的观看体验,精彩内容解锁寓教于乐新方式。为儿童提供优质动画内容的同时,我们更关注APP用户体验。在产品交互设计上我们立足儿童视角&…

21 VueComponent 事件的处理

前言 这是最近的碰到的那个 和响应式相关的问题 特定的操作之后响应式对象不“响应“了 引起的一系列的文章 主要记录的是 vue 的相关实现机制 呵呵 理解本文需要 vue 的使用基础, js 的使用基础 测试用例 测试用例如下, 一个简单的 按钮事件的触发 问题的调试 调用…

c# CAD二次开发 模拟CAD移动图形, 通过圆现在注记,改变图形颜色

c# CAD二次开发 模拟CAD移动图形, 通过圆现在注记,改变图形颜色 using Autodesk.AutoCAD.DatabaseServices; using Autodesk.AutoCAD.EditorInput; using Autodesk.AutoCAD.Geometry; using Autodesk.AutoCAD.Runtime; using System; using System.Colle…

矿井水除氟——高矿化度矿井水氟化物深度降解的技术方案

高矿化度矿井水是指含有高浓度溶解性矿物质的废水,通常指的是含有高浓度钠、钙、镁、铁、铝、钾等离子的废水。这些离子通常来自于废水所处的环境、工业或生产过程中使用的原材料和化学品。高矿化度的废水通常具有高盐度、高电导率、高硬度等特征,对环境…

梦笔记0527

早晨醒得早,玩了一会手机又睡着了。 梦里又回到了泰山信息科技的门口,想再看看那个灯光照耀下的橙色文字。大门象是用胶带贴住了,灯没开,黑乎乎的。使劲摇了几下,整个墙好像是木板,晃动着。 突然意识到解散…