--- title: Java SE笔记: 装饰者模式 date: 2016-08-24 21:10:00 updated: 2016-08-24 21:10:00 description: "装饰者模式" categories: [个人笔记] tags: [Java, Java SE笔记, 设计模式] --- ## 装饰者模式:用于对类扩展功能 例如:对FileReader这个类的close方法进行扩展: 1. 继承(不推荐,代码耦合度太高。不利于项目的扩展。) 2. 装饰者模式. - 装饰者模式中要求:装饰者中含有被装饰者的引用. - 装饰者模式中要求:装饰者和被装饰者应该实现同一个类型. ### Reader 公共父类或共同实现的接口 ```java public abstract class Reader { public abstract void close(); } ``` ### FileReader 被装饰者 ```java public class FileReader extends Reader { public void close() { System.out.println("FileReader closed!"); } } ``` ### BufferedReader 装饰者 ```java public class BufferedReader extends Reader { //关联关系 Reader reader; //这里使用多态,降低了装饰者和被装饰者的耦合度! //Constructor BufferedReader(Reader reader) { this.reader = reader; } //对FileReader中的close方法进行扩展 public void close() { //扩展 System.out.println("扩展代码1"); reader.close(); System.out.println("扩展代码2"); } } ``` ### 测试 ```java public class Test02 { public static void main(String[] args) { /* //1.创建被装饰者 FileReader fr = new FileReader(); //2.创建装饰者 BufferedReader br = new BufferedReader(fr); */ BufferedReader br = new BufferedReader(new FileReader()); //3.通过执行装饰者中的方法间接去执行被装饰者中的方法. br.close();//这里只需要执行最外层的对象的方法就可以了,程序会一层一层调用里层的方法! } } ```