一句话总结
通过共享不可变的内部状态来复用对象,显著降低内存与创建成本。
问题与场景
- 需要创建大量相似对象,内存占用高。
- 对象大部分状态可共享,只有少量状态不同。
- 希望减少对象创建频率,提高性能。
模式意图
运用共享技术有效地支持大量细粒度对象,把可共享的内部状态提取出来复用。
结构图
角色与职责
- 享元(图标):共享对象接口。
- 具体享元(缓存图标):保存内部状态并复用。
- 享元工厂(图标工厂):缓存并管理享元对象。
- 客户端:传入外部状态并使用享元。
大约 3 分钟
通过共享不可变的内部状态来复用对象,显著降低内存与创建成本。
运用共享技术有效地支持大量细粒度对象,把可共享的内部状态提取出来复用。
为目标对象提供一个替身,以控制访问、增强功能或隔离资源。
为其他对象提供一种代理以控制对这个对象的访问,在不改变目标对象的情况下增强能力。
用一个统一入口封装复杂子系统,简化调用方的使用成本。
为子系统的一组接口提供一个统一的高层接口,使子系统更易使用。
把“抽象维度”和“实现维度”分离,通过组合桥接,避免类爆炸并支持独立扩展。
将抽象部分与实现部分分离,使它们都可以独立变化,通过组合连接两者。
把“部分-整体”的层级结构组织成树形,让客户端用一致方式处理叶子与组合节点。
将对象组合成树形结构以表示“部分-整体”的层次结构,使客户端对单个对象和组合对象的使用具有一致性。
在不改动原对象的前提下,为对象动态叠加职责,按需组合功能。
动态地给对象添加一些额外职责,比生成子类更灵活。
把不兼容的接口“翻译”成业务期望的接口,让旧系统或第三方组件能无缝接入。
将一个类的接口转换成客户端期望的另一个接口,使原本接口不兼容的类可以协作。