Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1814588
  • 博文数量: 438
  • 博客积分: 9799
  • 博客等级: 中将
  • 技术积分: 6092
  • 用 户 组: 普通用户
  • 注册时间: 2012-03-25 17:25
文章分类

全部博文(438)

文章存档

2019年(1)

2013年(8)

2012年(429)

分类: C/C++

2012-03-25 19:38:52

当程序需要大量(海量)的对象时,内存可能会出现很大的问题。比如一个打怪游戏,里面有大量的怪物


  1. class Monster
  2. {
  3. public:
  4.     void getHurt();
  5. private:
  6.     double blood;
  7.     int numOfHands;
  8.     int numOfLegs;
  9.     int numOfHead;
  10. };

所有的怪物手,脚和头的数量都是一样的,只有血量是不同的。如果可以让所有的对象共享这些相同的数据,这样可以减轻内存的负担。
  1. class FlyweightMonster
  2. {
  3. public:
  4.     double getHurt(double blood);
  5. private:
  6.     int numOfHands;
  7.     int numOfLegs;
  8.     int numOfHead;
  9. };

这样内存中只需要维护一个实际的FlyweightMonster对象,用一个blood数组来作为它在内存中的“虚拟实例”。

  1. class VirtualMonstor
  2. {
  3. public:
  4.     static HashTable<int, double> bloodTable;
  5.     static int createMonstor()
  6.     {
  7.         static int id = 0;
  8.         ++id;
  9.         bloodTable[id] = 100;
  10.         return id;
  11.     }
  12. };

客户端需要用另一种方式创建Monster对象
  1. class Client
  2. {
  3.     static FlyweightMonster monster;
  4.     void AttackMonster()
  5.     {
  6.         int id = VirtualMonster::createMonster();
  7.         VirtualMonster::blood[id] = monster.getHurt(VirtualMonster::blood[id]);
  8.     }
  9. };

阅读(1764) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~