9 Decorator设计模式

Decorator设计模式

在程序中用一个对象(the Decorators)包装另外一个对象,这是一种被称为Decorator的设计模式。

如果要设计自己的IO包装类,这个类需要继承以FilterXXX命名的类,例如,设计一对输入输出包装类:RecordInputStreamRecordOutputStream,来完成从数据库文件中读取记录和往数据库文件中写入记录。

TestPrintWriter.java:

import java.io.*;

public class TestPrintWriter {

 

public static void main(String[] args) {

  try{

throw new Exception("test");

catch (Exception e) {

StringWriter sw = new StringWriter();

PrintWriter pw = new PrintWriter(sw);

e.printStackTrace(pw);

System.out.println(e.getMessage());

   //System.out.println(sw.toString());

}

}

}

思考与实践:

编写一个程序,将一个目录及其子目录下的所有txt类型的文本文件中的内容合并到若干个新的文本文件中,当第一个新产生的文件中存储的内容达到1Mbytes时,剩下的内容存储到第二个新的文件中,依次住下,新产生的文本文件名依次为1.txt2.txt......

思路:

1) 把目录下所有的文件取出来。

2) 把文件写入新文件中。

用自己的话叙述什么是流,什么节点流,什么是包装类。

编写一个函数,把StringReader输入流中所有英文字母变成大写字母,并将结果写入到一个StringWriter输出流对象中。然后,用这个函数将一个字符串中的所有字符转换成大写。

用记事本程序创建一个内容只有“中国”这两个字符的文本文件,然后用不同的编码格式分别保存这个文本文件。用UntralEdit打开这些不同编码格式的文件,并用十六进制方式查看它们的内容,结合你所看到的内容来叙述各种编码格式之间的差异。

编写下面的程序代码,分析和观察程序的运行结果:

import java.io.*;

public class InputReader{

public static void main (String [] args ) throws Exception{

InputStreamReader isr = new InputStreamReader(System.in, "so8859-1");

BufferedReader br = new BufferedReader(isr);

String strLine = br.readLine();

for(int i = 0; i < strLine.length(); i ++) {

System.out.println(Integer.toHexString(int)strLine.charAt(i));

}

isr.close();

System.out.println(strLine);

}

}

输入“中国”后,程序的运行结果如下:

d6

d0

b9

fa

???u

请按下面的两种要求修改上面的程序代码,让程序能够正常打印出输入的中文字符。

(1)修改程序中的语句:

InputStreamReader isr = new InputStreamReader(System.in, "so8859-1");

(2)不修改上面的语句,而是修改下面的语句:

System.out.println(strLine);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值