先做个比方:一个停车场有1000辆车子,每辆车子都是一个对象,每个对象实例占用内存0.1M,那么总共点用100M;如果数量再多些10000,100000...系统内存很容易消耗完.我们可以看出这么车子有很多是相同的,那么是否可以用共享的方式来减少实例的数量呢?答案是肯定的,于是FlyWeight方式应蕴而生.
Flyweight模式的几个要点:
1、面向对象很好的解决了抽象性的问题,但是作为一个运行在机器中的程序实体,我们需要考虑对象的代价问题。Flyweight设计模式主要解决面向对象的代价问题,一般不触及面向对象的抽象性问题。
2、Flyweight采用对象共享的做法来降低系统中对象的个数,从而降低细粒度对象给系统带来的内存压力。在具体实现方面,要注意对象的状态处理。
3、对象的数量太大从而导致对象内存开销加大(这个数量要经过评估,而不能凭空臆断)
From:捕鱼者说