Padrão de Projeto Factory Method em TypeScript: Criando Objetos de Forma Flexível

Padrão de Projeto Factory Method em TypeScript: Criando Objetos de Forma Flexível

Introdução

O padrão de projeto Factory Method é uma parte fundamental do mundo da programação orientada a objetos. Ele pertence à categoria de padrões de criação e oferece uma solução elegante para o problema de criar objetos de forma flexível e encapsulada. Neste artigo, exploraremos em detalhes o Factory Method em TypeScript, incluindo sua motivação, estrutura, implementação e exemplos práticos em TypeScript.

Motivação

O Factory Method é usado quando queremos criar objetos, mas não sabemos suas classes exatas no momento da criação. Ele nos permite encapsular a lógica de criação em um método separado, tornando nosso código mais flexível e menos acoplado.

Problema

Imagine um cenário em que você está desenvolvendo um aplicativo de logística. Você precisa criar diferentes tipos de veículos, como carros, caminhões e bicicletas, mas não sabe qual tipo de veículo será necessário em tempo de compilação. Como você cria esses veículos de forma flexível?

Solução

O Factory Method oferece uma solução elegante. Em vez de criar objetos diretamente com operadores new, você define um método de fábrica para criar objetos. Cada classe concreta derivada da fábrica implementa esse método de criação, permitindo que você instancie objetos específicos.

Estrutura

A estrutura do Factory Method consiste em quatro elementos principais:

  1. Produto Abstrato: Define uma interface para os objetos que a fábrica irá criar.
  2. Produto Concreto: Implementa a interface do Produto Abstrato.
  3. Fábrica Abstrata: Declara o método Factory Method que retorna um objeto do tipo Produto Abstrato.
  4. Fábrica Concreta: Implementa o Factory Method para criar um objeto Produto Concreto.

 

Pseudocódigo

				
					// Produto Abstrato
class Veiculo {
  acelerar() {}
  parar() {}
}

// Produto Concreto
class Carro extends Veiculo {
  // Implementação específica para Carro
}

// Fábrica Abstrata
class FabricaDeVeiculos {
  criarVeiculo() {}
}

// Fábrica Concreta
class FabricaDeCarros extends FabricaDeVeiculos {
  criarVeiculo() {
    return new Carro();
  }
}
				
			

Aplicabilidade

O Factory Method é aplicável em situações em que:

  • A classe não pode antecipar as classes de objetos que deve criar.
  • A classe quer delegar a responsabilidade de criação para suas subclasses.
  • A classe deseja fornecer uma interface para criar objetos, mas deixar suas subclasses escolherem as classes concretas.

Como Implementar

  1. Crie um Produto Abstrato e suas subclasses concretas.
  2. Crie uma Fábrica Abstrata que declara o Factory Method.
  3. Implemente Fábricas Concretas que herdam da Fábrica Abstrata e implementam o Factory Method.

Prós e Contras

Prós:

  • Desacopla o código do cliente da classe concreta do objeto.
  • Facilita a adição de novos tipos de objetos sem modificar o código existente.
  • Promove o princípio aberto/fechado (Open/Closed Principle).

Contras:

  • Introduz um número adicional de classes.
  • Pode tornar o código mais complexo em casos simples.

Exemplos de Código (em TypeScript):

				
					// Produto Abstrato
abstract class Veiculo {
  abstract acelerar(): void;
  abstract parar(): void;
}

// Produto Concreto
class Carro extends Veiculo {
  acelerar() {
    console.log('Carro acelerando.');
  }
  parar() {
    console.log('Carro parando.');
  }
}

// Fábrica Abstrata
abstract class FabricaDeVeiculos {
  abstract criarVeiculo(): Veiculo;
}

// Fábrica Concreta
class FabricaDeCarros extends FabricaDeVeiculos {
  criarVeiculo() {
    return new Carro();
  }
}

// Cliente
const fabrica = new FabricaDeCarros();
const meuCarro = fabrica.criarVeiculo();
meuCarro.acelerar();
meuCarro.parar();

				
			

Desafio – Tente Você Mesmo

Que tal aplicar o padrão Factory Method em um projeto próprio? Crie um cenário em que você precise criar objetos de tipos desconhecidos em tempo de execução e utilize este padrão para resolvê-lo.

Conclusão

O Factory Method em JavaScript oferece flexibilidade e facilita a criação de objetos em cenários em que a escolha do tipo de objeto é determinada dinamicamente. Incorporar esse padrão em seu código pode torná-lo mais modular e extensível, facilitando a manutenção e a evolução de suas aplicações.

Hashtags:

#FactoryMethod #TypeScript #PadroesDeProjeto #DesenvolvimentoDeSoftware #ProgramacaoOrientadaAObjetos