GoF (Gang of Four) 结构模式是将类和对象组成更大结构的一种处理方式。结构类模式使用继承来构成接口或实现。例如,多重继承表示单个类可以是多个父类的混合。利用多重继承可使独立开发的类库能够更方便地进行协同工作。
下表描述了各种 GoF 结构模式:
| 模式名称 | 处理的设计问题 | 角色 | 描述 |
|---|---|---|---|
| 适配器 | 将类接口转换为客户端要求的接口。Adapter 可以消除不兼容的接口,从而使那些在其他环境下不能协同工作的类能够协同工作。 | 目标 | 定义客户端使特定请求抽象化时使用的操作集合。 |
| 客户端 | 处理 Target 对象。 | ||
| Adaptee | 提供可用于特定请求的特定适配。 | ||
| 适配器 | 提供特定目标请求与特定 Adaptee(实际处理该请求)之间的“粘合剂”。 | ||
| Bridge | 提供一种抽象机制,允许某一特定行为的特定实现发生变化。 | 抽象 | 定义由 RefinedAbstraction 实现的抽象接口。 |
| RefinedAbstraction | 实现在 Abstraction 接口中声明的操作。 | ||
| Implementor | 定义由 ConcreteImplementor 实现的抽象接口。Abstraction 将使用此 Implementor。 | ||
| ConcreteImplementor | 实现在 Implementor 接口中声明的操作。 | ||
| 组合 | Composite 允许客户端以统一方式来处理可能包含其他对象的对象。 | 组件 | 定义要参与到组合中所有对象都必须实现的基本接口。 |
| Leaf | 一个对象,其中不包含与组合相关的其他对象。 | ||
| 组合 | 一个对象,其中包含符合 Component 接口标准的其他对象。 | ||
| 客户端 | 处理 Component 对象。 | ||
| Decorator | 动态地向某一对象附加额外的职责。Decorator 模式通过为子类派生提供灵活的替代方法来扩展功能。 | 组件 | 定义所有希望动态修饰的对象必须实现的抽象接口。 |
| ConcreteComponent | 实现在 Component 接口中声明的操作。 | ||
| Decorator | 由 ConcreteDecorator 实现的抽象接口。 | ||
| ConcreteDecorator | 实现在 Decorator 接口中声明的操作。 | ||
| Facade | 提供进入潜在复杂子系统的较高级别入口点,从而可以更有效地为客户端管理子系统。 | Facade | 负责委托请求的对象。 |
| Subsystem | 实现 Facade 对象委托的特定请求。 | ||
| Flyweight | 使用共享来有效地支持大量的细粒对象。 | Flyweight | 定义一个抽象接口,客户端将使用该接口来处理无法在 ConcreteFlyweight 之间共享的状态。 |
| ConcreteFlyweight | 实现 Flyweight 接口,并为可以共享的状态提供一个存储位置。 | ||
| UnsharedConcreteFlyweight | 实现 Flyweight 接口,并为不能共享的状态提供一个存储位置。 | ||
| FlyweightFactory | 提供用来创建 ConcreteFlyweight 对象的操作。 | ||
| 客户端 | 处理各种 Flyweight 对象。 | ||
| Proxy | 为控制访问代理或占位符的另一个对象提供代理或占位符 | Proxy | 实现由 Subject 定义的接口,Subject 将所有通过该接口的请求传递给 RealSubject。 |
| Subject | 定义 RealSubject 和 Proxy 必须实现的操作集合。 |