Java设计模式(二十三):享元模式

享元模式(Flyweight Pattern)

享元模式(Flyweight Pattern):属于对象的结构模式。运用共享技术有效地支持大量细粒度的对象。


享元模式UML图

Java设计模式(二十二):享元模式

Java


享元模式涉及的角色

抽象享元(Flyweight)角色:所有有具体享元类的超类或接口,通过这个接口,Flyweight 可以接受并作用于外部状态。具体享元(ConcreteFlyweight)角色:实现抽象享元角色所规定出的接口。如果有内部状态时,为内部状态提供存储空间。未共享的具体享元(UnShargedFlyweight)角色:指那些不需要共享的 Flyweight 子类,因为 Flyweight抽象类共享成为可能,但它并不强制共享。享元工厂(FlyweightFactory)角色:一个享元工厂,用来创建并管理 Flyweight 对象,它主要是用来确保合理地共享 Flyweight,当用户请求一个 Flyweight 时,FlyweightFactory 对象听歌一个已创建的实例或者创建一个(如果不存在的话)。


示例代码

抽象享元类 Flyweight

Java设计模式(二十二):享元模式

Java

具体享元类 ConcreteFlyweight

Java设计模式(二十二):享元模式

Java

非共享具体享元类 UnSharedConcreteFlyweiht

Java设计模式(二十二):享元模式

Java

享元工厂类 FlyweihtFactory

Java设计模式(二十二):享元模式

Java

客户端测试类 FlyweightPatternTest

Java设计模式(二十二):享元模式

Java


享元模式使用场景

一个系统有大量相同或者相似的对象,由于这类对象的大量使用,造成内存的大量耗费时可以考虑使用;对象的大部分状态都可以外部化,可以将这些外部状态传入对象中;使用享元模式需要维护一个存储享元对象的享元池,而这需要耗费资源,因此,应当在多次重复使用享元对象时才值得使用享元模式。


享元模式优点

  • 它可以极大减少内存中对象的数量,使得相同对象或相似对象在内存中只保存一份。

  • 享元模式的外部状态相对独立,而且不会影响其内部状态,从而使得享元对象可以在不同的环境中被共享。

参考

Java学习资料获取(复制下段连接至浏览器即可)

data:text/html;charset=UTF-8;base64,5p625p6E5biI5a2m5Lmg6LWE5paZ5YWN6LS56aKG5Y+W6K+35Yqg5omj5omj5Y+35pivMTAxODkyNTc4MA==

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值