一句话总结
确保某个类在系统中只有一个实例,并提供一个全局可访问的入口。
问题与场景
- 某些资源需要“全局唯一”且共享(如配置中心、日志器、连接池管理器)。
- 创建成本较高,频繁 new 造成浪费或状态不一致。
- 需要在系统中统一访问该实例,避免多处重复初始化。
模式意图
保证一个类只有一个实例,并提供一个访问它的全局访问点,用于共享资源与统一行为。
结构图
大约 3 分钟
确保某个类在系统中只有一个实例,并提供一个全局可访问的入口。
保证一个类只有一个实例,并提供一个访问它的全局访问点,用于共享资源与统一行为。
通过“复制已有对象”来创建新对象,避免重复初始化,适合高成本或复杂配置的对象构建。
用原型实例指定创建对象的种类,并通过复制这些原型创建新的对象,减少创建成本与重复逻辑。
提供创建“产品族”的统一入口,让具体工厂决定整套产品的实现,避免混用导致的不一致。
为创建一系列相关或相互依赖的对象提供一个接口,而无需指定它们的具体类,保证产品族的一致性。
把复杂对象的构建过程拆成稳定步骤,通过生成器逐步组装,既能复用流程又能产出不同配置。
将一个复杂对象的构建与其表示分离,使同样的构建过程可以创建不同的表示。
通过共享不可变的内部状态来复用对象,显著降低内存与创建成本。
运用共享技术有效地支持大量细粒度对象,把可共享的内部状态提取出来复用。
为目标对象提供一个替身,以控制访问、增强功能或隔离资源。
为其他对象提供一种代理以控制对这个对象的访问,在不改变目标对象的情况下增强能力。
用一个统一入口封装复杂子系统,简化调用方的使用成本。
为子系统的一组接口提供一个统一的高层接口,使子系统更易使用。
把“抽象维度”和“实现维度”分离,通过组合桥接,避免类爆炸并支持独立扩展。
将抽象部分与实现部分分离,使它们都可以独立变化,通过组合连接两者。
把“部分-整体”的层级结构组织成树形,让客户端用一致方式处理叶子与组合节点。
将对象组合成树形结构以表示“部分-整体”的层次结构,使客户端对单个对象和组合对象的使用具有一致性。
在不改动原对象的前提下,为对象动态叠加职责,按需组合功能。
动态地给对象添加一些额外职责,比生成子类更灵活。