Desarrollo de videojuegos 1: arquitectura del motor de videojuegos (2ª edición)

Page 143

4.2. Patrones de creación

[125]

Listado 4.2: Abstract Factory (Game) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24

/* ... */ Game game; SoldierFactory* factory; if (isSelectedMan) { factory = new ManFactory(); } else { factory = new OrcFactory(); } game->createSoldiers(factory); /* ... */ /* Game implementation */ vector<Soldier*> Game::createSoldiers(SoldierFactory* factory) { vector<Solider*> soldiers; for (int i=0; i<5; i++) { soldiers.push_back(factory->makeArcher()); soldiers.push_back(factory->makeRider()); } return soldiers; }

Como puede observarse, la clase Game simplemente invoca los métodos de la factoría abstracta. Por ello, createSoldier() funciona exactamente igual para cualquier tipo de factoría concreta (de hombres o de orcos). Una implementación del método makeArcher() de cada factoría concreta podría ser como sigue:

Listado 4.3: Abstract Factory (factorías concretas) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17

/* OrcFactory */ Archer* OrcFactory::makeArcher() { Archer archer = new Archer(); archer->setLife(200); archer->setName(’Orc’); return archer; } /* ManFactory */ Archer* ManFactory::makeArcher() { Archer archer = new Archer(); archer->setLife(100); archer->setName(’Man’); return archer; }

Nótese como las factorías concretas ocultan las particularidades de cada tipo. Una implementación similar tendría el método makeRider().


Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.