iT邦幫忙

2023 iThome 鐵人賽

DAY 27
0
自我挑戰組

設計模式系列 第 27

Day27 - 享元模式2(Flyweight pattern)

  • 分享至 

  • xImage
  •  

介紹
Day13介紹了享元模式,其概念為透過共享物件來減少資源使用。以下是Game Programming Pattern一書提供的另一個範例。
在設計遊戲地圖時,會在每個地圖區塊存入相關的地理資訊,例如草地、山丘、海洋等。通常這些資訊不會只出現一次,若地圖很大,這些地理資訊可能會重複儲存而占用資源,此時使用Flyweight pattern將共同的資訊提出。

enum Terrain
{
  TERRAIN_GRASS,
  TERRAIN_HILL,
  TERRAIN_RIVER
};

class World
{
private:
  Terrain tiles_[WIDTH][HEIGHT];
};

int World::getMovementCost(int x, int y)
{
  switch (tiles_[x][y])
  {
    case TERRAIN_GRASS: return 1;
    case TERRAIN_HILL:  return 3;
    case TERRAIN_RIVER: return 2;
  }
}

bool World::isWater(int x, int y)
{
  switch (tiles_[x][y])
  {
    case TERRAIN_GRASS: return false;
    case TERRAIN_HILL:  return false;
    case TERRAIN_RIVER: return true;
  }
}

Ref:
https://gameprogrammingpatterns.com/flyweight.html


上一篇
Day26 - 服務定位模式(Service Locator)
下一篇
Day28 - 子類沙箱(Subclass Sandbox)
系列文
設計模式30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言