当程序需要大量(海量)的对象时,内存可能会出现很大的问题。比如一个打怪游戏,里面有大量的怪物
- class Monster
- {
- public:
- void getHurt();
- private:
- double blood;
- int numOfHands;
- int numOfLegs;
- int numOfHead;
- };
所有的怪物手,脚和头的数量都是一样的,只有血量是不同的。如果可以让所有的对象共享这些相同的数据,这样可以减轻内存的负担。
- class FlyweightMonster
- {
- public:
- double getHurt(double blood);
- private:
- int numOfHands;
- int numOfLegs;
- int numOfHead;
- };
这样内存中只需要维护一个实际的FlyweightMonster对象,用一个blood数组来作为它在内存中的“虚拟实例”。
- class VirtualMonstor
- {
- public:
- static HashTable<int, double> bloodTable;
- static int createMonstor()
- {
- static int id = 0;
- ++id;
- bloodTable[id] = 100;
- return id;
- }
- };
客户端需要用另一种方式创建Monster对象
- class Client
- {
- static FlyweightMonster monster;
- void AttackMonster()
- {
- int id = VirtualMonster::createMonster();
- VirtualMonster::blood[id] = monster.getHurt(VirtualMonster::blood[id]);
- }
- };
阅读(1764) | 评论(0) | 转发(0) |