8.24.1 装饰者模式
装饰者模式:用于对类扩展功能
例如:对FileReader这个类的close方法进行扩展:
1.继承(不推荐,代码耦合度太高。不利于项目的扩展。)
2.装饰者模式. //1.装饰者模式中要求:装饰者中含有被装饰者的引用.
//2.装饰者模式中要求:装饰者和被装饰者应该实现同一个类型. public abstract class Reader//Reader 公共父类或共同实现的接口
{
public abstract void close();
} public class FileReader extends Reader //FileReader 被装饰者
{
public void close()
{
System.out.println("FileReader closed!");
}
} public class BufferedReader extends Reader //BufferedReader 装饰者
{
//关联关系
Reader reader; //这里使用多态,降低了装饰者和被装饰者的耦合度!
//Constructor
BufferedReader(Reader reader)
{
this.reader = reader;
}
//对FileReader中的close方法进行扩展
public void close()
{
//扩展
System.out.println("扩展代码1");
reader.close();
System.out.println("扩展代码2");
}
}
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();//这里只需要执行最外层的对象的方法就可以了,程序会一层一层调用里层的方法!
}
}