狂言设计模式之享元模式
大话设计模式之享元模式面向对象的思想很好地解决了抽象性的问题,一般也不会出现性能上的问题。但是在某些
大话设计模式之享元模式
面向对象的思想很好地解决了抽象性的问题,一般也不会出现性能上的问题。但是在某些情况下,对象的数量可能会太多,从而导致了运行时的代价。那么我们如何去避免大量细粒度的对象,同时又不影响客户程序使用面向对象的方式进行操作?
享元模式:运用共享技术有效的支持大量细粒度的对象
结构图:

解释:
- FlyweightFactory:一个享元工厂,用来创建并管理Flyweight对象,它主要是用来确保合理的共享Flyweight,当用户请求一个Flyweight时,FlyweightFactory对象提供一个已创建的实例或者创建一个(如果不存在的话)
- Flyweight:所有具体享元类的超类或接口,通过这个接口,Flyweight尅接受并作用于外部状态
- ConcreteFlyweight:继承Flyweight超累或实现Flyweight接口,并为内部状态增加储存空间
- UnsharedConcreteFlyweight:指那些不需要共享的Flyweight子类,因为Flyweight接口共享成为可能,但它并不强制共享
代码实现:
代码实现:
享元模式的应用
- 如果一个应用程序使用了大量的对象,而大量的这些对象造成了很大的存储开销时
- 当对象的大多数状态可以外部状态,如果删除对象的外部状态,那么可以用相对较少的共享对象取代多组对象
享元模式的优点:
- 实例总数少了
- 共享的对象越多,存储节约也就越多,节约量随着共享状态的增多而增大