Java SE笔记: 装饰者模式

装饰者模式:用于对类扩展功能

例如:对FileReader这个类的close方法进行扩展:

  1. 继承(不推荐,代码耦合度太高。不利于项目的扩展。)
  2. 装饰者模式.
  • 装饰者模式中要求:装饰者中含有被装饰者的引用.
  • 装饰者模式中要求:装饰者和被装饰者应该实现同一个类型.

Reader 公共父类或共同实现的接口

1
2
3
4
public abstract class Reader
{
public abstract void close();
}

FileReader 被装饰者

1
2
3
4
5
6
7
public class FileReader extends Reader
{
public void close()
{
System.out.println("FileReader closed!");
}
}

BufferedReader 装饰者

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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");
}
}

测试

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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();//这里只需要执行最外层的对象的方法就可以了,程序会一层一层调用里层的方法!
}
}
文章目录
  1. 1. 装饰者模式:用于对类扩展功能
    1. 1.1. Reader 公共父类或共同实现的接口
    2. 1.2. FileReader 被装饰者
    3. 1.3. BufferedReader 装饰者
    4. 1.4. 测试