23.3.2022 |

Factory Methode Pattern

Über das Factory Method Pattern erlaubt, in einer Superklasse Objekte zu erstellen aber in einer Unterklasse den Typ zu ändern.

Stellen wir uns vor wir wollen ein Space Shooter Spiel entwickeln, in dem man mit Verschiedenen Raumschiffen fliegen kann. Die Schiffe haben verschiedene Waffen mit verschiedenen arten von Projektilen.

So könnte eine Spaceship Klasse eine shoot() Funktion haben in der das Schiff ein Projektil erzeugt und in die Spielwelt einfügt. Wenn wir nun verschiedene Schiffsarten erstellen möchten, die die Spaceship Klasse erweitern und verschiedene Projektiltypen abfeueren sollen, müssten wir jedes mal die shoot() Funktion überschreiben. Um das zu umgehen, kann man das Factory Method Pattern anwenden und eine createProjectile Funktion auf der Schiffsklasse erstellen, die ein Projektil erstellt und zurückgibt und von der shoot Funktion aufgerufen wird. Das könnte dann wie folgt aussehen:

abstract class GameObject {
  world: any;

  tick() {}
}


abstract class Projectile extends GameObject {
}

class Bullet extends Projectile {
  tick() {
    // move bullet
  }
}

class Missile extends Projectile {
  tick() {
    // aiming logic
  }
}

abstract class Spaceship extends GameObject {
  // FACTORY METHOD
  createBullet() {
    return new Bullet();
  }

  shoot() {
    this.world.insert(this.createBullet())
  }
}

class MissileShip extends Spaceship {
  createBullet() {
    return new Missile()
  }
}

Quelle: https://refactoring.guru/design-patterns/factory-method

Lucas Meurer
Zur Übersicht

Mehr vom DevSquad...

Patrick Schaper

Zwei nützliche Tools mit süssen Grafiken

Sophia Brandt

A Handy Utility TypeScript Function To Access Environment Variables