IO学习之装饰者模式、适配器模式(扩展知识)
来源:互联网 发布:农村淘宝吴集服务站 编辑:程序博客网 时间:2024/05/22 06:58
-------android培训、java培训、期待与您交流! ----------
IO学习概述
写在前面
这篇博客写的是IO,但是并不是写IO各个操作类的具体功能,学习JAVA差不多快一年,IO流相信是大多数初学者的头疼之处,因为第一印象觉得它的类太多太多了,我也是,着实让我花了不少功夫,这个学期学校开了一门课叫做设计模式,里面有一个装饰者设计模式和适配器模式让我对IO流的体系结构有了一个深的体会。之后在网上看了视频,也参考了别人的博文,结合一下自己的分享给大家,更是给自己一次学习总结。无论是哪种编程语言,输入跟输出都是重要的一部分,在Android程序设计中,流相当重要,当然,功能是与JAVA一样的啦,它采用了流的机制来实现输入/输出,所谓流,就是数据的有序排列,而流可以是从某个源出来,到某个目的地去的。由流的方向,可以分成输入流和输出流,一个程序从输入流读取数据向输出流写数据。在我们学习IO之后都会知道Java I/O库具有两个对称性,它们分别是:1、输入-输出对称性,比如InputStream和OutputStream各自占据Byte流的输入与输出的两个平行的等级结构的根部。 而Reader和Writer各自占据Char流的输入与输出的两个平行的等级结构的根部。2、byte-char对称,InputStream和Reader的子类分别负责Byte和Char流的输入;OutputStream和Writer的子类分别负责Byte和Char流的输出,它们分别形成平行的等级结构。这个诀窍我们也是需要注意的额!
一、Java I/O库的两个设计模式:
1、装饰者模式
在由InputStream,OutputStream,Reader和Writer代表的等级结构内部,有一些流处理器可以对另一些流处理器起到装饰作用,形成新的,具有改善了的功能的流处理器。装饰者模式是Java I/O库的整体设计模式。这样的一个原则是符合装饰者模式的。类图如下:
类图解释:
Component(被装饰对象基类)
定义对象的接口,可以给这些对象动态增加职责;
ConcreteComponent(具体被装饰对象)
定义具体的对象,Decorator可以给它增加额外的职责;
Decorator(装饰者抽象类)
维护一个指向Component实例的引用,并且定义了与Component一致的接口;
ConcreteDecorator(具体装饰者)
也许你看了这个还不知道是怎么被装饰的,没关系,再看下面这个序列图。
或许大家会问为对象添加功能,我们用继承不就可以了吗?那这里的装饰模式和我们的IO体系结构有什么关系,还是不太明白!
我们先看《Head first 设计模式》中关于装饰模式的一个例子,看看装饰模式是怎样得到应用的。它这个例子大概是说:Beverage是一个抽象类,它被所有在一个咖啡店里卖的饮料继承。Beverage有个抽象方法cost,所有的子类都要实现这个抽象方法,计算它们的价格。现在有四个最基本的咖啡:HouseBlend,DarkRoast,Decaf,Espresso他们都继承自Beverage,现在的需求是说在四个最基本的咖啡里,每个都可以随便地添加调味品,像steamed milk,soy,还有mocha最后是加上whipped milk。如果是说按继承来实现这种几个调味品跟原来咖啡的组合的话,我们会很自然地设计来下面的类图来:
看了上面的类图,你一定有话要说!是的!这简直是太恐怖了,好像是整个类图都要爆炸了一样,而且以后随便增加一种调味品,继承于Beverage的子类还会 翻倍!这样的系统维护起来浭水异常噩梦,如果是按装饰模式的设计思路我们可以得出下面的设计类图:
可见装饰模式的使用,不仅类的数目大减少了,性能的重复也可以减至到最少。我们知道Java I/O库需要很多性能的各种组合,如果说这些性能的组合是通过继承方式来实现的话,那么每一种组合都需要一个类,这样就会出现大量重复性问题的出现,从而使类数目“爆炸”。而如果采用装饰模式,那么不仅类的数目大减少了,性能的重复也可以减至到最少。所以装饰模式是Java I/O库的基本模式。再回到Java I/O库,由于装饰模式的引用,造成了灵活性和复杂都大大增加了,我们在使用Java I/O库时,必须理解Java I/O库是由一些基本的原始流处理器和围绕它们的装饰流处理器所组成的,这样可以在学习和使用Java I/O库时达到事半功倍的效果。
首先是InputStream类型中的装饰模式:
对于上图FilterInputStream查看JDK1.4源代码,部分代码如下:
Java语言的I/O库提供了四大等级结构:InputStream,OutputStream,Reader,Writer四个系列的类。InputStream和OutputStream处理8位字节流数据, Reader和Writer处理16位的字符流数据。InputStream和Reader处理输入, OutputStream和Writer处理输出,所以OutputStream,Reader,Writer这三类的装饰模式跟前面详细介绍的InputStream装饰模式大同小异。
二、适配器模式
适配器模式模式在这里就不贴出类图了,明天博客将详细介绍IO体系结构中常用类的功能。。。
- IO学习之装饰者模式、适配器模式(扩展知识)
- Java IO流之装饰模式与适配器模式讲解
- JDK IO中的适配器模式和装饰者模式
- 设计模式之适配器模式与装饰者模式
- “设计模式”学习之三:适配器、装饰模式
- 设计模式(三)装饰者模式之java.io
- Java学习笔记之IO(十一):装饰者设计模式
- 适配器模式&装饰者模式&外观模式
- IO学习(十六)装饰设计模式
- 设计模式学习之装饰者模式
- 学习:设计模式之装饰者模式
- 设计模式学习之装饰者模式
- 适配器模式和装饰者模式
- 设计模式学习之路 - 装饰者模式 - 动态扩展器
- 扩展型模式之Decorator(装饰器)模式
- 设计模式学习(三)之装饰者模式
- JAVA IO之装饰器模式(Head first 设计模式之装饰器模式)
- java.io.*中的设计模式之 装饰(Decorator)模式
- 第十二周阅读程序三
- Docker学习笔记(一):Docker的三个基本概念
- Friendship
- CentOS 7最小化安装后找不到‘ifconfig’命令——修复小提示(转)
- pocketsphinx移植到OK6410
- IO学习之装饰者模式、适配器模式(扩展知识)
- 第十一周 【项目1 - 存储班长信息的学生类】(2)
- 思甜雅----关于qq的NABCD模型分析
- 动态视图_V$LOCK,V$LOCKED_OBJECT
- Altium Designer应用技巧1: 功能模块的复用方法
- 华为应急通讯 迅驰C2 新版双网 原版GSMS软件六合一套装U盘版 ISO文件 百度网盘下载
- LMS scorm1.2 JAVA开发经历
- Matlab精度,sprintf('%.40g',7/10)的问题
- Ucinet