设计模式——装饰模式
来源:互联网 发布:合肥市行知学校在哪 编辑:程序博客网 时间:2024/06/06 02:19
概述:当想要对已有的对象进行功能增强时,可以定义类,将已有对象传入,基于已有对象的功能,并提供加强功能。那么自定义的该类,就成为装饰类。
与继承的区别:
* 装饰模式比继承要灵活,避免了继承体系的臃肿,而且还降低了类与类之间的关系
* 装饰类因为增强已有对象,具备的功能和已有对象是相同的,只不过是提供了更强的功能,所以装饰类和被装饰类通常都属于一个体系(父类、接口)中
例子:实现读取文件每次能够读一行,并且还能够记录行号
装饰增强后的类:
/** * 每次读取一行,并记录行号 */public class MyLineNumberReader { private Reader reader; /**记录行号*/ private int lineNumber; /** * 在构造方法中注入Reader */ MyLineNumberReader(Reader reader) { this.reader = reader; } /** * 一次读一行的方法 */ public String myReadLine() throws IOException { lineNumber++; StringBuilder sb = new StringBuilder(); int ch = 0; while((ch=reader.read())!=-1) { if(ch=='\r') continue; if(ch=='\n') return sb.toString(); else sb.append((char)ch); } if(sb.length()!=0) return sb.toString(); return null; } public void myClose() throws IOException { reader.close(); } public void setLineNumber(int lineNumber) { this.lineNumber = lineNumber; } public int getLineNumber() { return lineNumber; }}
public class Test { public static void main(String[] args) throws IOException { FileReader fr = new FileReader("f:\\a.txt"); MyLineNumberReader mylnr = new MyLineNumberReader(fr); String line; while((line=mylnr.myReadLine())!=null) { System.out.println(mylnr.getLineNumber()+":"+line); } mylnr.myClose(); }}
结果:(每一行都带有行号)
1:aaaaaaaa2:bbbbbbb3:ccccccc4:ddddddd
阅读全文
0 0
- 设计模式—装饰模式
- 设计模式—装饰模式
- 设计模式—装饰模式
- 设计模式—装饰模式
- 设计模式—装饰模式
- 设计模式——装饰设计模式
- 设计模式——装饰设计模式
- 设计模式——装饰设计模式
- 【设计模式】——Decorator装饰模式
- 每日设计模式——装饰模式
- 设计模式——装饰者模式
- 设计模式——装饰模式
- 设计模式——装饰模式
- java设计模式——装饰模式
- 设计模式——装饰者模式
- 大话设计模式——装饰模式
- 设计模式——装饰模式
- 设计模式——装饰者模式
- HDU6152 Friend-Graph(拉姆齐定理,2017中国大学生程序设计竞赛
- 文件查找之 模拟everything (一)
- B. Godsend(Round #429 (Div. 2))
- 如何用csdn的Markdown编辑器写博客
- JavaScript事件总结
- 设计模式——装饰模式
- call和apply的区别
- 使用Python对音频进行频谱分析
- 各编译工具说明
- python---把tab.py的tab键自动补齐命令脚本,放入包目录下,python所有文件都可以使用
- BZOJ 3994 [SDOI2015]约数个数和 莫比乌斯反演
- HDU
- 云服务器上iis部署环境搭建
- 树莓派3 利用frp内网穿透搭建