对象的结构模式!
定义
以共享的方式高效地支持大量的细粒度对象。
适用场景
下列条件都满足时,考虑使用享元模式
- 一个系统中有大量对象
- 这些对象耗费大量的内存
- 对象的属性可以分为有状态和无状态的两类
- 把这些对象所有的有状态属性去除后,为同一个无状态对象
实现方式
- 将可以共享的状态和不可共享的状态区分开,并将不可共享的状态从类里去除
- 为这个类的创建提供一个工厂,进行创建控制
状态外部化
将状态移除享元对象后,对象的行为仍然需要这些状态,即状态剥离后无法正常工作!
解决办法
- 将不能剥离的行为和状态移动到客户端;(堆积在客户端,不利于复用和维护)
- 由客户端提供不可共享的状态,作为参数传递给享元对象。(改写方法的参数表,传递)
优点和缺点
优点
- 它大幅度地降低了内存中对象的数量
缺点
- 使得系统更加复杂,为了使得对象共享,将一些状态外部化,让程序逻辑复杂
- 读取外部状态使得运行时间稍微变长。