定义
使用共享对象有效的支持大量细粒度的对象
演化
1.单例模式
单例模式对于一个类,只能拥有它的一个实例。单例模式实现了绝对意义上的对象共享,使用共享对象带来的好处是显而易见的。
- 减少内存的消耗
- 避免频繁的创建和销毁对象带来的性能损耗
但是单例模式由于只能有一个实例,很难适用复杂多变的场景。一般我们只会把单例模式的写法应用到一些工具类的定义上,这些类通常只有方法没有成员变量,或者说成员变量的值只有一种,而不会有什么变化。而一旦成员变量可以有多重值,单例模式基本就没办法定义了。因为单例模式是需要对外屏蔽构造函数的,只能通过定义的getInstance()函数来获取单例对象。
2.工厂模式
工厂模式为我们提供了创建有限几种对象的最佳写法,它使得调用方通过传入对象标志的方式来获取一个相应的产品对象,从而简化了调用方获取对象的过程。
3.享元模式
使用工厂模式的方法创建和获取对象,但在创建对象之后,将其标志和对象存入Map中,再次获取的时候不再创建对象,而是从Map中取出。
它具备单例模式和工厂模式的优点
(1) 大大减少对象的创建
(2) 能满足多种情况下的使用需要
(3) 调用方对于对象的具体创建过程无需关注
总结
享元模式,维护有限几个不同的对象,并使得这些对象可以共享。使得它和单例模式一样拥有了减少内存消耗和避免频繁创建销毁对象的优点,且避免了单例不利于扩展和无法用于复杂场景的问题。享元模式利用工厂方法模式创建对象的方式,避免了用户手动创建对象。简单来讲,享元模式可以认为是单例模式的升华,它使用了单例模式管理对象的思想。同时也是单例模式与工厂模式的结合,它使用了工厂模式创建对象的方法。