Factory pattern*

Genom att skapa en fabrik som konstruerar objekt istället för att använda new() så måste man ändra på färre ställen ifall man senare vill ändra på exakt vilken klass (eller subklass) objekten ska tillhöra.

chevron-rightAnledningar att använda Factory Patternhashtag
  • En factory kan hålla reda på övergripande information som behöver finnas kvar mellan skapandet av olika instanser, t.ex. om instanserna ska numreras.

  • En factory gör att man kan återanvända komponenter, t.ex. om man vill att alla fiender ska ha samma komponent för att renderas ut till skärmen, samma textur etc. men man vill undvika att göra dessa static.

  • En factory innebär ökad decoupling – koden som skapar och kör fabrikens kod behöver inte känna till existensen av någon av de klasser fabriken faktiskt skapar instanser av. Återanvänder man fabriken på olika ställen i koden blir det fortfarande bara ett ställe man behöver ändra, om man vill byta ut vilka objekt som skapas.

Exempel

Enemy.cs
public abstract class Enemy
{
  public string Name { get; set; }
  public abstract int Attack();
}
Goomba.cs
public class Goomba : Enemy
{
  public Goomba() => Name = "Goomba";
  public override int Attack() => 6;
}
Fireflower.cs
public class Fireflower : Enemy
{
  public Fireflower() =>Name = "Fireflower";
  public override int Attack() => 2;
}

Abstrakta factories*

Last updated