设计模式 (7) - Flyweight/享元模式

问题描述

一个系统中可能创建某类型的大量实例,有什么方法可以节约内存开销呢?

享元模式

如图所示,享元模式划分对象的内部状态和外部状态,外部状态和对象的运行上下文相关;把外部状态封装成为对象的接口参数传递到对象的方法调用中。对象方法依据对象的内部状态和参数所代表的外部状态来执行相关逻辑。由于外部状态由客户计算或者保持,而内部状态又相对稳定,因此改对象的实例个数相对较少。这种对象属性的划分方法,减少了对象实例的个数。想象一下,如果对象保持内部状态和外部状态,由于外部状态的多样性,对象的实例个数相对更多。通过FlyweightFactory对象来管理对象实例并支持对象的共享,可以进一步减少内存开销。


讨论

享元模式的价值在于:划分对象的本质属性(内在属性)和外部属性,外部属性由客户维护并作为参数传入--这既保持了对象的细粒度也让对象的属性相对稳定;通过FlyweightFactory来管理对象的实例化,这使得对象共享成为可能。这些措施都可以减少系统内存开销。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值