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"); } }