装饰者模式

作用:对已有的类型进行拓展

abstract class Reader{
    public abstract void close();
}

class FileReader extends Reader{
    public void close(){
        System.out.println("FileReader closed!");
    }
}

//使用BufferedReader对FileReader扩展
//1、装饰者模式中要求:装饰者中含有被装饰者的引用
//2、装饰者模式中要求:装饰者和被装饰者应该实现同样的类型
class BufferedReader extends Reader{ //装饰者
    
    FileReader fr = new FileReader();  //被装饰者
    
    public BufferedReader(FileReader fr){
        this.fr = fr;
    }
    
    
    //扩展
    public void close(){
        System.out.println("扩展代码1");
        fr.close();
        System.out.println("扩展代码2");
    }
}


public class Decorate {

    public static void main(String[] args) {
        //1、创建被装饰者
        FileReader fr = new FileReader();
        
        //2、创建装饰者
        BufferedReader br = new BufferedReader(fr);
        
        //3、通过执行装饰者中的方法间接去执行被装饰者中的方法
        br.close();
    }
}

 

posted @ 2017-06-12 00:17  StanLong  阅读(100)  评论(0编辑  收藏  举报