Cleven Nesello
Cleven Nesello11/03/2023 10:40
Compartilhe

Abstract Factory usando C#

  • #C#

O Abstract Factory é um padrão de projeto que permite criar famílias de objetos relacionados sem precisar especificar suas classes concretas. Ao invés disso, o código utiliza uma interface ou classe abstrata para definir a assinatura dos métodos que criam esses objetos.

Por exemplo, imagine que você esteja criando um jogo que tenha diferentes tipos de inimigos em cada fase. Utilizando o Abstract Factory, você poderia criar uma fábrica abstrata que define métodos para criar diferentes tipos de inimigos. Em seguida, você poderia criar classes concretas que implementam essa fábrica abstrata, cada uma criando um conjunto diferente de inimigos.

Veja um exemplo em código:

// Abstract Factory

public interface IEnemyFactory

{

 IEnemy CreateEnemy();

}

// Concrete Factory 1

public class GoblinFactory : IEnemyFactory

{

 public IEnemy CreateEnemy()

 {

  return new Goblin();

 }

}

// Concrete Factory 2

public class OgreFactory : IEnemyFactory

{

 public IEnemy CreateEnemy()

 {

  return new Ogre();

 }

}

// Abstract Product

public interface IEnemy

{

 void Attack();

}

// Concrete Product 1

public class Goblin : IEnemy

{

 public void Attack()

 {

  Console.WriteLine("Goblin attacks with a club.");

 }

}

// Concrete Product 2

public class Ogre : IEnemy

{

 public void Attack()

 {

  Console.WriteLine("Ogre attacks with a giant club.");

 }

}

// Client

public class Game

{

 private IEnemyFactory _enemyFactory;

 public Game(IEnemyFactory enemyFactory)

 {

  _enemyFactory = enemyFactory;

 }

 public void Start()

 {

  IEnemy enemy = _enemyFactory.CreateEnemy();

  enemy.Attack();

 }

}

// Usage

Game game1 = new Game(new GoblinFactory());

game1.Start(); // output: "Goblin attacks with a club."

Game game2 = new Game(new OgreFactory());

game2.Start(); // output: "Ogre attacks with a giant club."

Nesse exemplo, o Abstract Factory é representado pela interface IEnemyFactory, que define o método CreateEnemy() para criar diferentes tipos de inimigos. As classes concretas GoblinFactory e OgreFactory implementam essa interface, cada uma criando um tipo diferente de inimigo.

A classe Game representa o cliente do padrão, que utiliza a fábrica abstrata para criar diferentes tipos de inimigos. Ao criar uma instância da classe Game com uma fábrica específica, o jogo pode criar inimigos de acordo com a fase atual.

O padrão Abstract Factory permite que o código seja facilmente adaptado a diferentes conjuntos de objetos relacionados sem precisar alterar o código existente. Ele também ajuda a garantir que os objetos criados sejam compatíveis e funcionem bem juntos.

Compartilhe
Comentários (0)