Filter 模式 - 图1
    image.png

    简单的来说,这个思想就是

    InputStream 拥有 read() 方法 , 但是你往往不是从 文件里面读取流数据的,可能需要从网络,缓存等等地方读取数据,当然你可以选择继承比如 FileInputStream 等类,但是这样一来,一个类就可能拥有几百个子类,造成一定的混乱,倒不如,你所有的类,都继承于 FilterInputStream
    比如,我想给 FileInputStream 扩展方法,最好的不是继承 FileInputStream 类,而是如下所示:

    1. import java.io.FileInputStream;
    2. import java.io.FilterInputStream;
    3. import java.io.IOException;
    4. import java.io.InputStream;
    5. public class FilterInputStreamTest {
    6. public static void main(String[] args) throws IOException{
    7. InputStream in = new ReadFile(new FileInputStream("test1.txt"));
    8. in.read();
    9. }
    10. }
    11. class ReadFile extends FilterInputStream{
    12. protected ReadFile(InputStream in) {
    13. super(in);
    14. }
    15. public int read() throws IOException {
    16. StringBuilder sb = new StringBuilder();
    17. int n;
    18. while((n = in.read()) != -1){
    19. sb.append((char)n);
    20. }
    21. System.out.println(sb.toString());
    22. return n;
    23. }
    24. }