模式设计java代码 java设计模式例子( 四 )


BufferedOutputStream 和 DataOutputStream是FilterOutputStream的两个子类 它们相当于Decorator模式中的ConcreteDecorator 并对传入的输出流做了不同的装饰 以BufferedOutputStream类为例
以下是代码片段
public class BufferedOutputStream extends FilterOutputStream {
private void flushBuffer() throws IOException {
if (count 〉 ) {
out write(buf count);
count = ;
}
}
public synchronized void write(int b) throws IOException {
if (count 〉= buf length) {
flushBuffer();
}
buf[count++] = (byte)b;
}
}
这个类提供了一个缓存机制 等到缓存的容量达到一定的字节数时才写入输出流 首先它继承了FilterOutputStream 并且覆盖了父类的write(int b)方法 在调用输出流写出数据前都会检查缓存是否已满 如果未满 则不写 这样就实现了对输出流对象动态的添加新功能的目的
下面 将使用Decorator模式 为IO写一个新的输出流
自己写一个新的输出流
了解了OutputStream及其子类的结构原理后 我们可以写一个新的输出流 来添加新的功能 这部分中将给出一个新的输出流的例子 它将过滤待输出语句中的空格符号 比如需要输出 java io OutputStream 则过滤后的输出为 javaioOutputStream 以下为SkipSpaceOutputStream类的代码
以下是代码片段
import java io FilterOutputStream;
import java io IOException;
import java io OutputStream;
/**
* A new output stream which will check the space character
* and won t write it to the output stream
* @author Magic
*
*/
public class SkipSpaceOutputStream extends FilterOutputStream {
public SkipSpaceOutputStream(OutputStream out) {
super(out);
}
/**
* Rewrite the method in the parent class and
* skip the space character
*/
public void write(int b) throws IOException{
if(b!= ){
super write(b);
}
}
}
它从FilterOutputStream继承 并且重写了它的write(int b)方法 在write(int b)方法中首先对输入字符进行了检查 如果不是空格 则输出
以下是一个测试程序
以下是代码片段
import java io BufferedInputStream;
import java io DataInputStream;
import java io DataOutputStream;
import java io IOException;
import java io InputStream;
import java io OutputStream;
/**
* Test the SkipSpaceOutputStream
* @author Magic
*
*/
public class Test {
public static void main(String[] args){
byte[] buffer = new byte[ ];
/**
* Create input stream from the standard input
*/
InputStream in = new BufferedInputStream(new DataInputStream(System in));
/**
* write to the standard output
*/
OutputStream out = new SkipSpaceOutputStream(new DataOutputStream(System out));
try {
System out println( Please input your words: );
int n = in read(buffer buffer length);
for(int i= ;i〈n;i++){
out write(buffer[i]);
}
} catch (IOException e) {
e printStackTrace();
}
}
}
执行以上测试程序 将要求用户在console窗口中输入信息 程序将过滤掉信息中的空格 并将最后的结果输出到console窗口 比如
以下是引用片段
Please input your words:
a b c d e f
abcdef
总 结
lishixinzhi/Article/program/Java/gj/201311/27433
【模式设计java代码 java设计模式例子】模式设计java代码的介绍就聊到这里吧 , 感谢你花时间阅读本站内容,更多关于java设计模式例子、模式设计java代码的信息别忘了在本站进行查找喔 。

推荐阅读