Java——装饰设计模式

来源:互联网 发布:尚观java就业班视频 编辑:程序博客网 时间:2024/05/29 03:15
/*装饰设计模式:基于已经存在的功能,提供增强的功能装饰设计模式的由来:Rreader    ---TextReader    ---MediaReader提高子类的读的效率Reader    ---TextReader       ---BufferedTextReader    ---MediaReader       ---BufferedMediaReader    ---OtherReader       ---BufferedOtherReader既然都是提高读的效率,所以就把这个功能提取出来,封装到一个类中,谁需要被提高效率就把谁作为参数传递给该类的构造方法class BufferedReader{    private Reader reader;    public BufferedReader(Reader reader){        this.reader = reader;    }}使用装饰设计模式后,继承体系如下Reader    ---TextReader    ---MediaReader    ---OtherReader    ---BufferedReader1:装饰设计模式使原有继承体系变简单了2:因为是在原有功能提供增强功能,所以这个类还属于原体系*//*import java.io.*;class test{    public static void main(String[] args)throws IOException{        FileReader fr = new FileReader("temp.txt");        LineNumberReader bnr = new LineNumberReader(fr);        String line = null;        bnr.setLineNumber(4);        while((line = bnr.readLine())!=null){            System.out.println(bnr.getLineNumber()+":"+line);        }        bnr.close();    }}*///自定义LineNumberReaderimport java.io.*;class MyLineNumberReader extends MyBufferedReader{    private int lineNumber;    public MyLineNumberReader(Reader r){        super(r);    }    public void setLineNumber(int lineNumber){        this.lineNumber = lineNumber;    }    public int getLineNumber(){        return lineNumber;    }    //重写一次读一行的功能    public String myReadLine()throws IOException{        ++lineNumber;        return super.myReadLine();    }}//上篇中有介绍class MyBufferedReader{    private Reader r;//具备读功能的成员    private char[] arr = new char[1024];//提高效率的缓冲区    private int index;    private int count;//统计缓冲区中的字符个数    public MyBufferedReader(Reader r){        this.r = r;    }    //一次读一个字符的功能    public int myRead()throws IOException{        //先判断缓冲区中是否有字符        if(count==0){            //从文件中读一批数据到缓冲区            count = r.read(arr);            index = 0;//下标置为0,从头开始取        }        if(count<0){            return -1;        }        int num = arr[index];//从缓冲区中取一个字符        count--;//数量-1        index++;        return num;    }    //一次读一行的功能    //反复调用myRead()方法,不够一行的时候存储,够一行的时候返回    public String myReadLine()throws IOException{        StringBuilder sb = new StringBuilder();//实现存储字符        int num;        while((num=myRead())!=-1){            if(num=='\r')                continue;            else if(num=='\n')                return sb.toString();            else                 sb.append((char)num);        }        return null;    }    public void myClose()throws IOException{        r.close();    }}class test{    public static void main(String[] args)throws IOException{        FileReader fr = new FileReader("temp.txt");        MyLineNumberReader mnr = new MyLineNumberReader(fr);        String line = null;        while((line = mnr.myReadLine())!=null){            System.out.println(mnr.getLineNumber()+":"+line);        }        mnr.myClose();    }}
原创粉丝点击