11 Composite模式(组合模式)——容器与内容的一致性

11.1 Composite模式

在计算机的文件系统中,有“文件夹”概念(在有些操作系统中,也称为目录)。文件夹中既可以放入文件,也可以放入其他文件夹。在子文件夹中。一样地既可以放入文件,也可以放入子文件夹。可以说,文件夹是形成了一种容器结构、递归结构。
虽然文件夹与文件是不同类型的对象,但是它们都“可以被放入到文件夹中”。文件夹和文件有时也被称为“目录条目”。在目录条目中,文件夹和文件都别当做是同一种对象看待(即一致性)。
有时,与文件夹和文件都作为目录条目看到一样,将容器和内容作为同一种东西看待,可以帮助我们方便地处理问题。在容器中既可以放入内容,也可以放入小容器,然后在那个小容器中,可以继续放入更小的容器。这样,就形成了容器结构,递归结构。
能够使容器与内容具有一致性,创造出递归结构的模式就是Composite模式。

11.2 示例程序

名字 说明
Entry 抽象类,用来实现File类和Directory类的一致性
File 表示文件的类
Directory 表示文件夹的类
FileTreatementException 表示向文件中增加Entry是发生异常的类
Main 测试程序行为的类

image.png

11.3 Composite模式中的角色

在该模式中有以下几种角色。

  • Leaf(树叶) 表示内容的角色。
  • Compostie(复合物):表示容器的角色,可以在其中放入leaf和Composite角色。
  • Component 使Leaf和Composite角色具有一致性的角色。Component角色是Leaf角色和Composite角色的父类
  • Client 使用Composite的角色。

image.png

12 Decorator模式——装饰边框与被装饰物的一致性

12.1 Decorator模式

不断地为对象添加装饰的设计模式被称为Decorator模式。

12.2 示例程序

类的一览表

名字 说明
Display 用于显示字符串的抽象类
StringDisplay 用于显示单行字符串的类
Border 用于显示装饰边框的类
SildeBorder 用于显示左右边框的类
FullBorder 用于显示上下边框的类
Mian 测试程序的类

image.png

12.3 Decorator模式中的角色

image.png

在Decorator有以下几种角色。

  • Component:增加功能是的核心角色
  • ConcreteComponent:该角色实现了Component角色所定义的接口
  • Decorator(装饰物):该角色具有与Component角色相同的接口。在它内部保存了被装饰对象——Component角色。Decorator角色知道自己要装饰的对象。
  • ConcreteDecorator:该角色是具体的Decorator角色。