黑马程序员技术交流社区

标题: 装饰设计模式 [打印本页]

作者: zhangjiesss    时间: 2016-8-16 12:38
标题: 装饰设计模式
大神们,求装饰设计模式用字符流代码体现出来 谢谢
作者: talons    时间: 2016-8-17 21:00
有点长。。
[Java] 纯文本查看 复制代码
import java.io.*;

//带行号的缓冲输入字符流
class BufferedLineNum  extends BufferedReader{       
        //在内部维护一个被装饰类的引用。
        BufferedReader bufferedReader;
        //定义行号
        int count = 1;
        //构造函数
        public BufferedLineNum(BufferedReader bufferedReader){
                super(bufferedReader);// 注意: 该语句没有任何的作用,只不过是为了让代码不报错。
                this.bufferedReader = bufferedReader;
        }       
        //重写BufferedReader的readLine方法实现行号功能
        public String readLine() throws IOException{
                String line = bufferedReader.readLine();
                if(line==null){
                        return null;
                }
                line = count+" "+line;
                count++;
                return line;
        }
}

//带分号缓冲输入字符流
class BufferedSemi extends BufferedReader{
        //在内部维护一个被装饰类的引用。
        BufferedReader bufferedReader;               
        //构造函数
        public BufferedSemi(BufferedReader bufferedReader){
                super(bufferedReader);// 注意: 该语句没有任何的作用,只不过是为了让代码不报错。
                this.bufferedReader = bufferedReader;
        }
        //重写BufferedReader的readLine方法实现每行加分号功能
        public String readLine() throws IOException{
                String line = bufferedReader.readLine();  //如果这里的ReadLine方法是调用了buffereLineNum的readLine方法,问题马上解决。
                if(line==null){
                        return null;
                }
                line = line +";";
                return line;
        }
       
}

//缓冲类带双引号
class BufferedQuto extends BufferedReader{
       
        //在内部维护一个被装饰的类
        BufferedReader bufferedReader;
        //构造方法
        public BufferedQuto(BufferedReader bufferedReader){  //new  BufferedSemi2();
                super(bufferedReader) ; //只是为了让代码不报错..
                this.bufferedReader = bufferedReader;
        }
        //重写BufferedReader的readLine方法实现加双引号功能
        public String readLine() throws IOException{
                String line = bufferedReader.readLine();  //如果这里的ReadLine方法是调用了buffereLineNum的readLine方法,问题马上解决。
                if(line==null){
                        return null;
                }
                line = "\""+line +"\"";
                return line;
        }       
}
public class Demo {       
        public static void main(String[] args) throws IOException {
                File file = new File("F:\\Demo1.java");
                FileReader fileReader = new FileReader(file);
                //建立缓冲输入字符流
                BufferedReader bufferedReader = new BufferedReader(fileReader);
                //建立带行号的缓冲输入字符流
                BufferedLineNum bufferedLineNum = new BufferedLineNum(bufferedReader);               
                //带分号的缓冲输入字符流
                BufferedSemi bufferedSemi = new BufferedSemi(bufferedLineNum);               
                //带双引号的缓冲输入字符流
                BufferedQuto bufferedQuto = new  BufferedQuto(bufferedSemi);
               
                String line = null;
                while((line = bufferedQuto.readLine())!=null){
                        System.out.println(line);                       
                }               
        }       
}





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2