11 Composite模式(组合模式)——容器与内容的一致性
11.1 Composite模式
在计算机的文件系统中,有“文件夹”概念(在有些操作系统中,也称为目录)。文件夹中既可以放入文件,也可以放入其他文件夹。在子文件夹中。一样地既可以放入文件,也可以放入子文件夹。可以说,文件夹是形成了一种容器结构、递归结构。
虽然文件夹与文件是不同类型的对象,但是它们都“可以被放入到文件夹中”。文件夹和文件有时也被称为“目录条目”。在目录条目中,文件夹和文件都别当做是同一种对象看待(即一致性)。
有时,与文件夹和文件都作为目录条目看到一样,将容器和内容作为同一种东西看待,可以帮助我们方便地处理问题。在容器中既可以放入内容,也可以放入小容器,然后在那个小容器中,可以继续放入更小的容器。这样,就形成了容器结构,递归结构。
能够使容器与内容具有一致性,创造出递归结构的模式就是Composite模式。
11.2 示例程序
| 名字 | 说明 |
|---|---|
| Entry | 抽象类,用来实现File类和Directory类的一致性 |
| File | 表示文件的类 |
| Directory | 表示文件夹的类 |
| FileTreatementException | 表示向文件中增加Entry是发生异常的类 |
| Main | 测试程序行为的类 |

11.3 Composite模式中的角色
在该模式中有以下几种角色。
- Leaf(树叶) 表示内容的角色。
- Compostie(复合物):表示容器的角色,可以在其中放入leaf和Composite角色。
- Component 使Leaf和Composite角色具有一致性的角色。Component角色是Leaf角色和Composite角色的父类
- Client 使用Composite的角色。
12 Decorator模式——装饰边框与被装饰物的一致性
12.1 Decorator模式
不断地为对象添加装饰的设计模式被称为Decorator模式。
12.2 示例程序
类的一览表
| 名字 | 说明 |
|---|---|
| Display | 用于显示字符串的抽象类 |
| StringDisplay | 用于显示单行字符串的类 |
| Border | 用于显示装饰边框的类 |
| SildeBorder | 用于显示左右边框的类 |
| FullBorder | 用于显示上下边框的类 |
| Mian | 测试程序的类 |

12.3 Decorator模式中的角色

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