javaIO系统----再看装饰者模式
javaIO系统拥有各种各样的类,尤其是每次要进行读写操作时,总会一层套一层的new,以前不明白为什么要这样做,不过学习了适配器模式后,对于这种做法立刻了解了:动态扩展IO的功能,使之符合使用者的习惯,虽然这样的做法有时候会迷惑使用者,对于这个确定,确实恼火,不过当弄明白了其设计方式,个人觉得倒也不会造成太大的困扰。
一:
最基本的IO:inputStream,outputStream,Reader,Writer
前两者为JDK1.0中的内容,后两者为JDK1.1中增加的内容。首先要明确的是,任何输入输出的类都由此四类派生而来。其中前两个主要为对字节的读写,后两个主要为对字符的读写。
二:
如果现在要对文件进行读写操作,则可以直接使用最基本的方式FileinputStream,FileoutputStream,FileReader,FileWriter,这四个各自 直接或间接 继承自最基本四个IO
这四各类的构造器接受参数为:String,File,以及文件描述符,通过这四个可以创建对文件的“流”。但是如果直接这样创建的“流”,其操作方式为每次读写都对硬盘访问,理论上这种方式肯定不如带缓存方式的读写。
三:
带缓存的读写类有BufferedinputStream,BufferedoutputStream,BufferedReader,BufferedWriter。
BufferedinputStream,BufferedoutputStream 构造器接受的参数为inputStream,outputStream 和一个size(用来指定缓冲区大小,有默认值)
BufferedReader,BufferedWriter 构造器接受的参数为Reader,Writer 和一个size(用来指定缓冲区大小,有默认值)
可以看出,如果要想用这四个方法进行文件读写,首先应该使用 二 中的类创建出我们需要的构造器参数,然后再创造出我们需要的带buffer的对象。
四:
对流的读写,java提供了一种格式读取方式:DatainputStream,DataoutputStream,虽然Stream本质上是对字节的读取,但是通过java自身的数据格式,这种方式可以直接决定一次读取多少字节,并将其转化为相应的数据格式,此类的构造器接受的的参数为inputStream outputStream,因此要使用其对文件进行读写,需要使用 二 中的方式进行包装。
五:
对字符的读取,之前说了,从jdk1.1之后,java提供了Reader和Writer进行,同时将readLine方法从Stream中移动到这两个类当中。如果要进行readLine操作,只能从此两类进行,但是这并不意味着Stream不能够进行行读取。
这时候,我们便需要适配器模式进行转换,将Stream转化为本节中的两个类,inputStreamReader与outputStreamWriter,这两个类接受的参数即为Stream,这样子就可以将Stream包装成可以readLine的Reader或Writer
装饰者模式:装饰者模式让我们能够自由组合自己想要的功能,此特性在javaIO系统中展现了其威力,并也非常好的解释了为什么对一个文件的读取为什么要new很多歌对象。
适配器模式:自然就如其名字一样,将一个东西包装一层,编程另一个我们所需要的东西。
javaIO系统----再看装饰者模式的更多相关文章
- 装饰者模式学习:模拟咖啡馆的点单系统来剖析装饰者模式的使用 + 装饰者模式在java I/O 中的应用
通过模拟咖啡馆的点单系统来剖析装饰者模式的使用 参考:https://blog.csdn.net/gududedabai/article/details/81989196 一).传统的点单系统构建,每 ...
- Java 的设计模式之一装饰者模式
刚开始接触装饰者的设计模式,感觉挺难理解的,不够后来花了一个晚上的时间,终于有头绪了 装饰者设计模式:如果想对已经存在的对象进行装饰,那么就定义一个类,在类中对已经有的对象进行功能的增强或添加另外的行 ...
- Java设计模式之装饰者模式
要实现装饰者模式,注意一下几点内容: 1.装饰者类要实现真实类同样的接口 2.装饰者类内有一个真实对象的引用(可以通过装饰者类的构造器传入) 3.装饰类对象在主类中接受请求,将请求发送给真实的对象(相 ...
- 结合JDK源码看设计模式——装饰者模式
定义 在不改变原有对象的基础之上,将功能附加到对象上 适用场景 扩展一个类的功能 动态的给对象增加功能,当功能不需要的时候能够动态删除 详解 在看到定义的时候,可能很多人会想,这不就是继承吗?的确很像 ...
- JavaIO模型--装饰者模式
JavaIO体现出装饰者的设计模式 今天在学SparkRDD之前,听了一堂复习JavaIO的课,觉得讲得不错 Java的IO一直让我觉得一层一层的很麻烦,刚接触的时候,理不太清楚 只知道要分解为输入输 ...
- 再起航,我的学习笔记之JavaScript设计模式13(装饰者模式)
装饰者模式 装饰者模式(Decorator): 在不改变原对象的基础上,通过对其进行过包装拓展(添加属性高或者方法)使原有对象可以满足用户的更复杂需求. 如果现在我们有个需求,需要做一个提交表单,当我 ...
- 由孙悟空的七十二变看Java设计模式:装饰者模式
目录 应用场景 代码示例 改进代码 装饰者模式 定义 意图 主要解决问题 何时使用 优缺点 孙悟空的七十二变 应用场景 京东.天猫双十一,情人节商品大促销,各种商品有不同的促销活动 满减:满200减5 ...
- 解决servlet中get方式中中文乱码问题前驱(一):装饰者模式再理解
package day02; import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; ...
- 装饰者模式 Decoration
1.什么是装饰者模式 动态给对象增加功能,从一个对象的外部来给对象添加功能,相当于改变了对象的外观,比用继承的方式更加的灵活.当使用装饰后,从外部系统的角度看,就不再是原来的那个对象了,而是使用一系列 ...
随机推荐
- 学习 ---- JavaScript 高级设计程序 第三章(数据类型)
3.4 数据类型 基本数据类型:Undefined.Null.Boolean.Number.String 复杂数据类型:Object 3 ...
- an interview question(4)
版权声明:本文为博主原创文章,未经博主允许不得转载. 写这篇博客前请让博主先吐糟下自己的PC. i3+2G内存+开了一上午=C盘剩下0字节+打开VS2012花了半个小时+一晚上的心情不好 吐槽完PC, ...
- bootstrap 分页表格插件
找了两个table的插件,一个是bootstrap table ,另一个是bootstrap-paginator 这里只介绍 bootstrap table 插件 使用及简单案例 文档介绍:http: ...
- python 汇总
TypeError: ReadExcelList() takes exactly 1 argument (2 given) 传入的参数有问题
- 安装MySQL(简便)
1.在本地虚拟机上上传mysql的5个安装包 2.查看opt目录下是否有这5个安装包 yum install /var/opt/mysql-community-* -y //安装MySQL syste ...
- hdu 3473 Minimum Sum
传送门 之前看挑战的时候看到一道分桶法的题目,其实我不是很明白分桶法应该怎么写.看到poj后面的讨论版上写着划分树裸题,而我以前就听说过了划分树,就干脆拿来学习一下.在写这篇博客的时候,其实我还是对这 ...
- Spring相关
一.Spring中ApplicationContext加载机制加载器目前有两种选择:ContextLoaderListener和ContextLoaderServlet. 这两者在功能上完全等同,只是 ...
- Web自动化基础(一)使用Selenium定位元素
什么是元素?我们知道网页上有什么内容显示出来,比如一个按钮,一个输入框,一张图片,都可以理解成元素,这些元素是由html代码构成的,比如图片可以用<img>标签来展示,一个输入框可以用&l ...
- 在update时用触发器插入数据
CREATE trigger [dbo].[Debt_Insert] on [dbo].[Debt] for insert as declare @tmpOrderID1 varchar(30)sel ...
- Sql Server参数化查询之where in和like实现详解
where in 的参数化查询实现 首先说一下我们常用的办法,直接拼SQL实现,一般情况下都能满足需要 string userIds = "1,2,3,4"; using (Sql ...