Flyweight 享元模式——对象结构型模式。
1.动机
软件系统采用纯粹对象方案的问题在于大量细粒度的对象会很快充斥在系统中,从而带来很高的运行时代价——主要指内存需求方面的代价。
2.定义
用共享技术来有効地支持大量细粒度对象的复用。
3.用自己的一句话概述
比如汉字文档,不需要1w字的产生1w个对象,重复字只有一个对象, 同时记录位置即可。
4.优点
- 相同对象只要保存一份,这降低了系统中对象的数量,从而降低了系统中细粒度对象给内存带来的压力。
5.缺点
- 为了使对象可以共享,需要将一些不能共享的状态外部化,这将增加程序的复杂性。
- 读取享元模式的外部状态会使得运行时间稍微变长 。
6.使用场景
- 系统中存在大量相同或相似的对象,这些对象耗费大量的内存资源。
- 大部分的对象可以按照内部状态进行分组,且可将不同部分外部化,这样每一个组只需保存一个内部状态。
- 由于享元模式需要额外维护一个保存享元的数据结构,所以应当在有足够多的享元实例时才值得使用享元模式。
7.总结
- 面向对象很好地解决了抽象性的问题,但是作为一个运行在机器中的程序实体,我们需要考虑对象的代价问题,享元模式主要解决面向对象的代价问题,一般不触及面向对象的抽象性问题。
- 享元模式采用对象共享的做法来降低系统中对象的个数,从而降低细粒度对象给系统带来的内存压力。在具体实现方面,要注意对象状态的处理。
- 对象数量太大从而导致对象内存开销加大——什么样的数量才算大?这需要我们自习的根据具体应用情况进行评估,而不能凭空臆测。
0 条评论