享元模式
定义
运用共享技术有效的支持大量细粒度对象的复用,通过共享已经存在的对象来减少需要创建的对象数量,避免大量相似类的创建开销,从而提高李彤资源利用率。
- Flyweight:抽象享元角色,定义对象的外部状态和内部状态的接口或实现。
- ConcreteFlyweight:具体享元角色,实现抽象角色定义的业务。该角色内部状态的处理应该与环境无关,不应该出现一个操作改变了内部状态,同时修改了外部状态。
- unsharedConcreteFlyweight:不可共享的享元角色,不存在外部状态或者安全要求(如线程安全)不能使用共享技术的对象,该对象一般不会出现在享元工厂中。
- FlyweightFactory:享元工厂,构造一个池容器,同时提供从池中获取对象的方法。
具体实现
1 | public class UnsharedConcreteFlyweight { |
优点
- 减少程序创建对象数量,降低内存占用,增强系统性能。
缺点
- 提高系统复杂性,需要将一些不能共享的状态外部化。
使用场景
- 系统内存在大量相似对象
- 细粒度的对象都具备较接近的外部状态,且内部状态与环境无关,也就是说对象没有特定身份。
- 需要缓冲池的场景。
代码:GitHub
欢迎关注公众号: