设计模式(五)--装饰模式
来源:互联网 发布:怎么查看淘宝店家电话 编辑:程序博客网 时间:2024/06/05 15:29
★ 场景和问题
在不对原有对象类进行修改的基础上,如何给一个或多个已有的类对象提供增强额外的功能?
★ 引例
写一个MyBufferedReader类,使它能够对字符流(如FileReader、InputStreamReader和PipedReader等)进行功能增强:
(1) 提供带缓冲的myRead()方法,对原有的read()方法进行增速;
(2)提供一个能够每次读取一行字符的myReadLine()方法。
这里做三种类体系对比:
附例码如下:
package SingelModel.pattern.decorator.v3;import java.io.IOException;import java.io.Reader;public class MyBufferedReader extends Reader { //一般使用装饰模式时,继承Reader,功能更强大 private Reader r; //封装一个对象 ※※※※private char[] cbuf = new char[1024];private int count=0; //记录当前缓冲区中字符的个数private int pos=0; //数组元素的下标(当前读取的位置)public MyBufferedReader(Reader r ){ //使用父类对象※※※※this.r = r;}public int myRead() throws IOException {if(count<=0){count = r.read(cbuf);if(count==-1){return -1;//代表读取到文件末尾}pos=0;}char ch = cbuf[pos];count--;pos++;return ch;}public String myReadLine() throws IOException{StringBuilder sb = new StringBuilder();int ch=0;while( (ch=myRead())!=-1 ){if(ch=='\r'){continue;}if(ch=='\n'){return sb.toString();}sb.append((char)ch);}if(sb.length()!=0){return sb.toString();}return null;}public void myClose() throws IOException{r.close(); //关流}@Overridepublic int read(char[] cbuf, int off, int len) throws IOException {return r.read(cbuf, off, len);}@Overridepublic void close() throws IOException {System.out.println("同意关闭...");r.close();System.out.println("下次再见...");}}
测试代码如下:
@Testpublic void testMyBufferedReadLineDemo() throws IOException {InputStreamReader r = new InputStreamReader(new FileInputStream("a.txt"));MyBufferedReader br = new MyBufferedReader(r);String str = null;while ((str = br.myReadLine()) != null) {System.out.println(str);}br.myClose();}
测试结果:
vfgrfbate41215dlspo找那个呢 汇总发生了可能发fe156122546162156nunjj
结果和随机输入到a.txt文件一样!!!
阅读全文
0 0
- 设计模式(五)--装饰模式
- 设计模式之五---装饰者模式
- 设计模式(五):装饰模式(Decorator)
- 设计模式(五)--装饰模式
- JAVA设计模式五之装饰模式
- javascript设计模式(五) 装饰者模式 状态模式
- 设计模式---装饰模式
- 设计模式:装饰模式
- 设计模式------装饰模式
- 设计模式--装饰模式
- 设计模式--装饰模式
- 设计模式--装饰模式
- 设计模式 装饰模式
- 设计模式----装饰模式
- 设计模式-【装饰模式】
- 设计模式--装饰模式
- 设计模式装饰模式
- 设计模式 - 装饰模式
- 任总在新员工入职培训座谈会上的讲话
- Android hybrid 开发实践(android webview)
- 码位(code position/point)Unicode 编码与 Python 2/3 编码兼容性问题
- 【Java】EL表达式
- RecyclerView回收原理分析
- 设计模式(五)--装饰模式
- 二分图最大匹配(HihoCoder
- echarts资源
- hibernate与mybatis的区别优缺点对比
- 通俗易懂动态规划
- 欢迎使用CSDN-markdown编辑器
- 二叉树的遍历
- 一元线性回归
- ios app上传成功但ITunes Connect不显示的解决方法