享元模式(Flyweight Pattern)
享元模式(Flyweight Pattern):属于对象的结构模式。运用共享技术有效地支持大量细粒度的对象。
享元模式UML图
享元模式涉及的角色
抽象享元(Flyweight)角色:所有有具体享元类的超类或接口,通过这个接口,Flyweight 可以接受并作用于外部状态。具体享元(ConcreteFlyweight)角色:实现抽象享元角色所规定出的接口。如果有内部状态时,为内部状态提供存储空间。未共享的具体享元(UnShargedFlyweight)角色:指那些不需要共享的 Flyweight 子类,因为 Flyweight抽象类共享成为可能,但它并不强制共享。享元工厂(FlyweightFactory)角色:一个享元工厂,用来创建并管理 Flyweight 对象,它主要是用来确保合理地共享 Flyweight,当用户请求一个 Flyweight 时,FlyweightFactory 对象听歌一个已创建的实例或者创建一个(如果不存在的话)。
示例代码
抽象享元类 Flyweight
具体享元类 ConcreteFlyweight
非共享具体享元类 UnSharedConcreteFlyweiht
享元工厂类 FlyweihtFactory
客户端测试类 FlyweightPatternTest
享元模式使用场景
一个系统有大量相同或者相似的对象,由于这类对象的大量使用,造成内存的大量耗费时可以考虑使用;对象的大部分状态都可以外部化,可以将这些外部状态传入对象中;使用享元模式需要维护一个存储享元对象的享元池,而这需要耗费资源,因此,应当在多次重复使用享元对象时才值得使用享元模式。
享元模式优点
-
它可以极大减少内存中对象的数量,使得相同对象或相似对象在内存中只保存一份。
-
享元模式的外部状态相对独立,而且不会影响其内部状态,从而使得享元对象可以在不同的环境中被共享。
参考
Java学习资料获取(复制下段连接至浏览器即可)
data:text/html;charset=UTF-8;base64,5p625p6E5biI5a2m5Lmg6LWE5paZ5YWN6LS56aKG5Y+W6K+35Yqg5omj5omj5Y+35pivMTAxODkyNTc4MA==