java设计模式--装饰模式
来源:互联网 发布:网络词画风是什么意思 编辑:程序博客网 时间:2024/06/05 14:07
装饰模式
装饰模式(Decorator Pattern):
在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。
特点:
(1) 装饰对象和真实对象有相同的接口。这样客户端对象就能以和真实对象相同的方式和装饰对象交互
(2) 装饰对象包含一个真实对象的引用(reference)
(3) 装饰对象接受所有来自客户端的请求。它把这些请求转发给真实的对象。
(4) 装饰对象可以在转发这些请求以前或以后增加一些附加功能。这样就确保了在运行时,不用修改给定对象的结构就可以在外部增加附加的功能。在面向对象的设计中,通常是通过继承来实现对给定类的功能扩展。
★ 场景和问题
在不对原有对象类进行修改的基础上,如何给一个或多个已有的类对象提供增强额外的功能?
装饰模式就可以实现该功能。同时继承原有类,也能实现该功能
这里模拟实现BufferReader中的readLine()方法,模拟一个带缓存的myRead()方法,对原有的read()方法进行增速
package cn.hncu.pattern.decorator.v1;import java.io.FileReader;import java.io.IOException;public class MyBufferedReader {private FileReader r; //封装一个对象private char[] cbuf = new char[1024];private int count=0; //记录当前缓冲区中字符的个数private int pos=0; //数组元素的下标(当前读取的位置)public MyBufferedReader(FileReader r ){this.r = r;}public int myRead() throws IOException {//对read()方法的功能加强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{//模拟readLine()方法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();}}a.txt
sd2332uewwekjewkjewjkdfiuewi3223——————————Over----------测试
package cn.hncu.pattern.decorator.v1;import java.io.BufferedReader;import java.io.DataInputStream;import java.io.FileNotFoundException;import java.io.FileReader;import java.io.IOException;import org.junit.Test;public class TestMyBufferedReader {////////////1 测试对read()的增强//////////////////////@Testpublic void bufferedReaderDemo() throws Exception{//javaAPI中的类FileReader r = new FileReader("a.txt");BufferedReader br = new BufferedReader(r);int ch=0;while( (ch=br.read())!=-1){System.out.print((char)ch);}br.close();}/* 测试结果: * sd2332uew * wekjewkjewjk * dfiuewi3223 * * ——————————Over---------- */@Testpublic void myBufferedReaderDemo() throws Exception{//我们自己写的类FileReader r = new FileReader("a.txt");MyBufferedReader br = new MyBufferedReader(r);int ch=0;while( (ch=br.myRead())!=-1){System.out.print((char)ch);}br.myClose();}/* 测试结果: * sd2332uew * wekjewkjewjk * dfiuewi3223 * * ——————————Over---------- *////////////2 测试对readLine()的增强/////////////////////@Testpublic void testBufferedReadLineDemo() throws IOException{//javaAPI中的类BufferedReader br =new BufferedReader( new FileReader("a.txt"));String str=null;while( (str=br.readLine())!=null ){System.out.println(str);}br.close();}/* 测试结果: * sd2332uew * wekjewkjewjk * dfiuewi3223 * * ——————————Over---------- */@Testpublic void testMyBufferedReadLineDemo() throws IOException{//我们自己写的类MyBufferedReader br =new MyBufferedReader( new FileReader("a.txt"));String str=null;while( (str=br.myReadLine())!=null ){System.out.println(str);}br.myClose();}/* 测试结果: * sd2332uew * wekjewkjewjk * dfiuewi3223 * * ——————————Over---------- */}
阅读全文
1 0
- Java装饰设计模式
- Java 装饰设计模式
- Java 装饰设计模式
- java 装饰设计模式
- Java 装饰设计模式
- java 装饰设计模式
- Java装饰设计模式
- Java 装饰设计模式
- Java装饰设计模式
- Java 设计模式 --装饰模式
- Java 设计模式-----装饰模式
- java设计模式-装饰模式
- java设计模式---装饰模式
- java设计模式-装饰模式
- 【Java设计模式】装饰模式
- java设计模式-装饰模式
- java设计模式--装饰模式
- java设计模式---装饰模式
- fatal: Could not read from remote repository.的解决办法
- 用python代码生成Loadrunner所需的用户名和密码
- HDU 1009 (FatMouse' Trade)
- 进程信息之times系统调用
- Mac系统如何显示隐藏文件?
- java设计模式--装饰模式
- 正则表达式 常用元字符
- Hadoop Archives指南
- Currency Exchange--(最短路径算法)
- unity接android sdk的碰到的一些问题记录
- 注解:编译注解
- Redis高可用分布式集群
- 头文件(Header Files)和命名空间(Namespace)
- 穿过街道