在探索java i/o的Decorator模式时,遇到的一个问题.
2007-03-29 18:54
260 查看
这里对java i/o的Decorator模式做一下简介(如果想知道更多的有关知识,可以到网上搜一下):
Decorator模式又名包装器(Wrapper),它的主要用途在于给一个对象动态的添加一些额外的职责。与生成子类相比,它更具有灵活性。有时候,我们需要为一个对象而不是整个类添加一些新的功能,比如,给一个文本区添加一个滚动条的功能。我们可以使用继承机制来实现这一功能,但是这种方法不 够灵活,我们无法控制文本区加滚动条的方式和时机。我们可以使用一种更为灵活的方法,就是把文本区嵌入到滚动条中。而这个滚动条的类就相当于对文本区的一个装饰。
在java.io包有一个输出流OutputStream;它的子类关系如下图:
OutputStream ---- ByteArrayOutputStream
|--- FileOutputStream
|--- PipedOutputStream
|--- FiterOutputStream ---- BufferedOutputStream
|--- DataOutputStream
OutputStream是一个抽象类,有些方法是抽象,是没有实现的;还有它继承的两个接口:Closeable和Flushable;包含两个方法close()和flush(),这两个接口中必须实现的方法,在outputStream类中,也没有实现,只有空方法.(如果你安装了jdk的话,解压src,就可以看到);在ByteArrayOutputStream、FileOutputStream中也没有不存;FilerOutputStream和DataOutputStream存在但它只是调用成员的fluse()方法,但是本身它的父类或被作为装饰类也没有实现fluse()方法,那在使用fluse()方法岂不是没什么用处?
我本还以为可能是调用了本地方法,但发现在它方法前面也没有Native的关键字,因些排除这种可能。探索中。。。。。。。(请高手帮助,急盼)
在学习中,发现 在FileOutStream中存在很多的native方法,它都是调用了java运行不幸中的方法,还是说这些方法不包含在运行环境中呢?还是直接调用操作系统的?
在不同的操作系统中,看来得有几套java运行环境才行,然后把中间码及时编译,这样才执行,从而实现跨平台。
Decorator模式又名包装器(Wrapper),它的主要用途在于给一个对象动态的添加一些额外的职责。与生成子类相比,它更具有灵活性。有时候,我们需要为一个对象而不是整个类添加一些新的功能,比如,给一个文本区添加一个滚动条的功能。我们可以使用继承机制来实现这一功能,但是这种方法不 够灵活,我们无法控制文本区加滚动条的方式和时机。我们可以使用一种更为灵活的方法,就是把文本区嵌入到滚动条中。而这个滚动条的类就相当于对文本区的一个装饰。
在java.io包有一个输出流OutputStream;它的子类关系如下图:
OutputStream ---- ByteArrayOutputStream
|--- FileOutputStream
|--- PipedOutputStream
|--- FiterOutputStream ---- BufferedOutputStream
|--- DataOutputStream
OutputStream是一个抽象类,有些方法是抽象,是没有实现的;还有它继承的两个接口:Closeable和Flushable;包含两个方法close()和flush(),这两个接口中必须实现的方法,在outputStream类中,也没有实现,只有空方法.(如果你安装了jdk的话,解压src,就可以看到);在ByteArrayOutputStream、FileOutputStream中也没有不存;FilerOutputStream和DataOutputStream存在但它只是调用成员的fluse()方法,但是本身它的父类或被作为装饰类也没有实现fluse()方法,那在使用fluse()方法岂不是没什么用处?
我本还以为可能是调用了本地方法,但发现在它方法前面也没有Native的关键字,因些排除这种可能。探索中。。。。。。。(请高手帮助,急盼)
在学习中,发现 在FileOutStream中存在很多的native方法,它都是调用了java运行不幸中的方法,还是说这些方法不包含在运行环境中呢?还是直接调用操作系统的?
在不同的操作系统中,看来得有几套java运行环境才行,然后把中间码及时编译,这样才执行,从而实现跨平台。
相关文章推荐
- JAVA策略模式(3)之解决具体遇到的一个问题
- 阅读一个Java ERP系统源码遇到的问题
- mybatis中遇到的一个小问题【There is no result map named java.lang.Integer in this SqlMap】
- 今天遇到的一个问题----java String.split( Regex )的误区
- mybatis中遇到的一个小问题【There is no result map named java.lang.Integer in this SqlMap】
- java面试时遇到的一个有意思的小问题
- 解析 Java 类和对象的初始化过程(由一个单态模式引出的问题谈起)
- 每天一个设计模式之Decorator模式解决类间组合爆炸问题
- JAVA GUI设计中遇到的一个小问题
- java的初始化研究:android开发中遇到的一个奇怪问题
- 向各位请教一个关于Decorator模式的问题
- 初学java,写的一个小程序遇到点问题,又碰上论坛关闭,在此上代码,希望能有人帮我看下,多谢
- 解析 Java 类和对象的初始化过程 由一个单态模式引出的问题谈起
- Java遇到的一个小问题
- 处理Java编码遇到的一个问题
- 通过SVN导入两个项目(从java移植到andorid)时,一个android,一个普通java项目时可能遇到的两个问题
- java工程项目里,在一个包里面,不能出现同名的类名,这问题是刚接触java才会遇到的,特别是新手一般都没有建立包,而是使用默认的,易出现同名的类名,导致eclipse提示错误
- JAVA 正则匹配遇到的一个问题
- java工程项目里,在一个包里面,不能出现同名的类名,这问题是刚接触java才会遇到的,特别是新手一般都没有建立包,而是使用默认的,易出现同名的类名,导致eclipse提示错误
- Java和C#访问同一个数据库遇到的一些问题