结构型模式

——对象关系复杂度的结构化管理哲学


一、结构型模式的本质(先于具体模式)

1. 结构型模式解决的根问题是什么?

在软件系统中,复杂性并非只来源于"逻辑",更多来自于:

结构型模式的核心使命只有一个:

在不破坏系统稳定性的前提下,组织对象之间的关系,以控制复杂度与变化的扩散。


2. 结构型模式的三大不变关注点(稳定知识)

不变关注点说明
接口一致性客户是否能用"统一方式"使用不同对象
结构组合方式对象如何形成更大的结构单元
间接层设计是否通过中间层隔离变化与控制依赖

结构型模式不是"加功能",而是 重新组织关系


3. 结构型模式的抽象分类(升维视角)

抽象维度对应模式
接口转换与统一适配器、外观
抽象与实现解耦桥接
递归结构建模组合
行为叠加装饰器
间接访问与控制代理、享元

二、适配器模式(Adapter)

1. 模式本质(第一性原理)

通过引入中间转换层,隔离接口不兼容带来的变化。

适配器并不改变已有对象的能力,只改变访问方式


2. 适配器解决的核心矛盾

适配器 = 变化的缓冲区


3. 稳定结构模型

classDiagramTarget <|-- AdapterAdaptee <-- AdapterClient --> Target

4. 分类(本质而非语法)

类型本质差异
类适配器通过继承完成接口转换(耦合较高)
对象适配器通过组合完成接口转换(推荐)
接口适配解决"接口过大"的适配问题

5. 与外观模式的根本区别

对比点适配器外观
目标解决不兼容简化使用
是否改变接口
使用动机被动主动

三、桥接模式(Bridge)

1. 模式本质

将"抽象维度"与"实现维度"解耦,使它们可以独立演化。

桥接模式不是为了解耦类,而是为了解耦 变化的维度


2. 根问题:多维度变化导致的继承爆炸

当一个类同时沿多个维度变化时:


3. 稳定结构模型

classDiagramAbstraction o--> ImplementorRefinedAbstraction --|> AbstractionConcreteImplementor --|> Implementor

4. 与策略模式的边界

对比点桥接策略
关注点结构维度解耦行为选择
生命周期长期结构设计运行期决策

四、组合模式(Composite)

1. 模式本质

通过递归一致性,使单个对象与对象组合对客户端透明。

组合模式解决的不是"树",而是 一致性问题


2. 三个不可动摇的原理

  1. 统一接口(Leaf 与 Composite 等价)
  2. 递归结构(组合中包含组合)
  3. 客户端透明性(Client 无需区分节点类型)

3. 稳定结构模型

classDiagramComponent <|-- LeafComponent <|-- CompositeComposite o--> ComponentClient --> Component

4. 适用场景的抽象表达


五、装饰器模式(Decorator)

1. 模式本质

在不改变对象接口与语义的前提下,叠加对象能力。

装饰器不是"代理",而是 能力增强机制


2. 为什么不用继承?


3. 稳定结构模型

classDiagramComponent <|-- ConcreteComponentComponent <|-- DecoratorDecorator o--> Component

4. 与代理模式的分界线

对比点装饰器代理
目的增强能力控制访问
是否改变语义
关注点功能叠加权限/治理

六、外观模式(Facade)

1. 模式本质

为复杂子系统提供一个认知友好的统一入口。

外观模式解决的是:"系统可用性"而非"系统能力"


2. 稳定结构模型

classDiagramFacade --> SubSystemAFacade --> SubSystemBClient --> Facade

3. 设计哲学


七、享元模式(Flyweight)

1. 模式本质

通过分离可共享状态与不可共享状态,降低对象数量成本。


2. 核心思想


3. 稳定结构模型

classDiagramFlyweightFactory --> FlyweightClient --> FlyweightFactory

八、代理模式(Proxy)

1. 模式本质

通过引入间接层,控制对象的访问方式与访问时机。


2. 代理关注的不是"功能",而是"治理"


3. 稳定结构模型

classDiagramSubject <|-- RealSubjectSubject <|-- ProxyProxy o--> RealSubjectClient --> Subject

九、Generation Gap(生成-扩展隔离模式)

1. 正确定位(非 GoF 正统结构型模式)

这是一个 工程演进与代码生成隔离模式,而非经典结构型模式。


2. 模式本质

通过继承层次隔离"生成代码"与"手写代码"的变化。


3. 核心矛盾与解决思路

问题应对策略
生成代码被修改禁止修改
需求变化差异计算
频繁再生成隐藏生成细节

十、结构型模式的决策矩阵(工程视角)

模式解决核心问题是否改变接口是否增强能力
适配器接口不兼容
外观使用复杂
桥接多维变化
组合结构一致性
装饰器能力扩展
代理访问控制可选
享元性能/内存

关联内容(自动生成)