繁体   English   中英

轻量化设计模式如何维护不同的对象?

[英]How flyweight design pattern maintains different objects?

(我在阅读飞行重量时找到了这个例子)
我们假设游戏中有一个叫士兵的物体,这个物体的区别仅在于位置
现在我的问题是
如果我要在该物体上使用轻量化模式,则在游戏中我可能会要求多次获得一名士兵,并且我希望每个士兵都拥有自己的位置。
我该如何处理?

是的,我同意patheros ...但是我想指出的是,使用Flyweight模式的动机并不需要一些额外的类结构。 激励因素是通过使用“跳线”模式,您可以最大限度地减少对常见/繁重资源的使用。

假设所有士兵都使用相同的图形表示。 而不是每个士兵都实例化图形数据(即,实现中一些常见的“繁重”方面),而是创建一个由所有士兵共享的“模板”对象。

class SharedSoldierData {
  /** UI representation, big, and common to all. */
  byte[] bitmap;
}

class Soldier {
  int x,y;

  void doMovement(SharedSoldierData extraData) {
    // In order to move, this method needs the 'UI' information (a bitmap), which must be provided.
  }
} 

// example usage:
SharedSoldierData soldierType = new SharedSoldierData(...); // setup with the soldiers bitmap
Soldier soldier1 = new Soldier();
Soldier soldier2 = new Soldier();

// modify the solider x/y locations as the game progresses...

soldier1.doMovement(soldierType); // move soldier 1
soldier2.doMovement(soldierType); // ditto for soldier 2.

您将只有一个SharedSoldierData类实例(一个重资源实例;在本例中为一个位图),但是您可能会有多个Soldier类实例。 除非提供对大量资源数据的访问权限,否则士兵无法“做任何事情”。

如果所有士兵都包含一堆共享数据,那么轻量化设计模式将非常有用。 例如,假设您有士兵和平民。 每个人都有不同的最大生命值,攻击速度和伤害,但所有士兵都共享这些属性。 在这种情况下,您可以:

class UnitTemplate {
    String name;
    int maxHP;
    int attackSpeed;
    int damage;
}

class Unit{
    UnitTemplate template;
    int x;
    int y;
}

将有2个UnitTemplate实例,一个实例用于实体类型的单元,另一个实例用于民用类型的单元。 可以有任意数量的Unit实例,每个实例都指向士兵UnitTemplate或平民UnitTemplate。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM