Funções fábrica


As factory functions são funções projetadas para criar e retornar objetos. Essas funções são chamadas de “fábricas” porque têm o propósito específico de construir instâncias de objetos de maneira padronizada, muitas vezes aplicando lógica ou configurações específicas durante o processo de criação.

Exemplo

Considere o exemplo de uma factory function que cria objetos representando pessoas:

function criarPessoa(nome, sobrenome, altura, peso) {
  return {
    nome,
    sobrenome,
    altura,
    peso,
 
    falar(assunto) {
      return `${this.nome} está falando sobre ${assunto}`;
    },
 
    imc() {
      const imc = this.peso / this.altura ** 2;
 
      return imc.toFixed();
    },
  };
}
 
const pessoa = criarPessoa("Luiz", "Otávio", 1.8, 80);
 
console.log(pessoa.falar("JavaScript"));
console.log(pessoa.imc());

Neste exemplo, a função criarPessoa aceita parâmetros para nome, sobrenome, altura e peso e retorna um objeto que representa uma pessoa. Este objeto tem propriedades (nome, sobrenome, altura e peso) e métodos (falar e imc) associados a ele. O método falar retorna uma frase relacionada ao nome da pessoa e ao assunto fornecido, enquanto o método imc calcula e retorna o índice de massa corporal.

Benefícios das Factory Functions

  1. Encapsulamento: A criação de objetos é encapsulada na função, ocultando detalhes de implementação e proporcionando uma interface limpa para o uso.

  2. Reutilização de código: Se várias instâncias do mesmo tipo de objeto precisarem ser criadas, a factory function permite reutilizar a lógica de criação.

  3. Configurabilidade: A função pode aceitar parâmetros para configurar as propriedades iniciais do objeto, permitindo uma flexibilidade maior.

  4. Padronização: Permite aplicar padrões específicos ou regras de negócios durante a criação de objetos.

  5. Organização: Ajuda a manter o código organizado, concentrando a lógica de criação em um local específico.

  6. Facilidade de manutenção: Facilita futuras atualizações e modificações na lógica de criação sem afetar o restante do código.

Referências