1、装饰模式:
    就是给一个对象增加一些新的功能,并且是动态的,要求装饰对象和被装对象实现同一个接口。装饰对象持有被装饰对象的实例。
装饰者模式中的要求:
 1) 装饰者和被装饰则应该实现同一个类;
 2) 装饰者含有被装饰者的引用
 3) 一个类含有另一个类明显的关联关系
 4) 装饰者和被装饰者里面的方法一定要一样,为什么要这样做?是为了保障这两个类具有相同的方法
装饰者模式比继承更能降低代码的耦合度,有利于项目的扩展;

public class DecoratorTest {
    public static void main(String[] args) {
        FileReader fReader = new FileReader();//创建被装饰者
        BufferedReader brReader = new BufferedReader(fReader);//创建装饰者
        brReader.close();//通过执行装饰者中的方法间接去执行被装饰者中的方法。
    }
}

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

class FileReader extends Reader {// FileReader 是被装饰者
    @Override
    public void close() {
        System.out.println("FileReader类中的重写的close方法执行");
    }
}

class BufferedReader extends Reader {// BufferedReader是装饰者
    FileReader fileReader;// 一个类含有另一个类明显的关联关系

    public BufferedReader(FileReader fileReader) {// 装饰者模式中要求,装饰者含有被装饰者的引用
        this.fileReader = fileReader;
    }

    @Override
    public void close() {
        System.out.println("扩展代码1");// 什么是扩展就是在源代码执行的基础之上,加一些代码,这就是扩展
        fileReader.close();
        System.out.println("扩展代码2");
    }
}
View Code

相关文章: