As funções factory em JavaScript são um conceito poderoso, permitindo a criação de objetos de forma dinâmica e modular. Elas facilitam a criação de múltiplas instâncias de um objeto com a mesma estrutura, mas com dados diferentes. Neste post, vamos explorar o que são funções factory, como implementá-las e algumas de suas aplicações práticas.

1. O que é uma função Factory?

Uma função factory é uma função que retorna um objeto. Ao contrário de classes, que são uma estrutura mais formal para criação de objetos, as funções factory oferecem uma maneira mais simples e flexível de criar instâncias.

2. Criando uma função Factory

Abaixo, vemos um exemplo básico de uma função factory que cria objetos do tipo Carro:

function Carro(marca, modelo, ano) {
  return {
    marca,
    modelo,
    ano,
    info() {
      return `${this.marca} ${this.modelo} - ${this.ano}`;
    },
  };
}

const carro1 = Carro("Fusca", "Volkswagen", 1972);
const carro2 = Carro("Civic", "Honda", 2020);

console.log(carro1.info()); // "Fusca Volkswagen - 1972"
console.log(carro2.info()); // "Civic Honda - 2020"

3. Vantagens das funções Factory

As funções factory oferecem várias vantagens:

  • Flexibilidade: Você pode facilmente criar instâncias de objetos com propriedades diferentes.

  • Encapsulamento: Você pode esconder detalhes de implementação dentro da função factory.

  • Sem herança complexa: A criação de objetos é simples, sem a necessidade de se preocupar com o sistema de herança do protótipo.

4. Exemplo Avançado: Função Factory com propriedades privadas

Você pode usar closures para criar propriedades privadas em uma função factory, garantindo que certas informações não possam ser acessadas diretamente de fora do objeto.

function ContaBancaria(saldoInicial) {
  let saldo = saldoInicial;

  return {
    depositar(valor) {
      saldo += valor;
      console.log(`Depositado: R$${valor}. Saldo atual: R$${saldo}`);
    },
    sacar(valor) {
      if (valor <= saldo) {
        saldo -= valor;
        console.log(`Sacado: R$${valor}. Saldo atual: R$${saldo}`);
      } else {
        console.log("Saldo insuficiente!");
      }
    },
    consultarSaldo() {
      return `Saldo: R$${saldo}`;
    },
  };
}

const conta = ContaBancaria(1000);
conta.depositar(500); // "Depositado: R$500. Saldo atual: R$1500"
conta.sacar(200); // "Sacado: R$200. Saldo atual: R$1300"
console.log(conta.consultarSaldo()); // "Saldo: R$1300"

5. Quando usar funções Factory

As funções factory são especialmente úteis quando você precisa criar muitas instâncias de objetos similares, mas com dados diferentes. Elas são comuns em situações como:

  • Criação de objetos em aplicações de jogos.

  • Criação de componentes em frameworks front-end.

  • Qualquer cenário onde um objeto deve ser criado com um conjunto padrão de propriedades e métodos.

As funções factory são uma abordagem eficiente e simples para criar objetos em JavaScript. Elas oferecem flexibilidade, encapsulamento e uma maneira intuitiva de lidar com a criação de instâncias de objetos.

Experimentar e implementar funções factory pode enriquecer sua habilidade como desenvolvedor JavaScript e melhorar a organização do seu código!

QUER SER UM PROGRAMADOR FULL-STACK E DOMINAR AS PRINCIPAIS TECNOLOGIAS DO MERCADO?

Aprenda através de projetos reais e aulas práticas. São 20 cursos completos + cursos bônus. Grupos privados exclusivos, atualizações constantes e lives semanais.

Python, PHP, Java Script, CSS, Node, Angular JS, MySQL, Photoshop, Flutter, AWS, Apache e muito mais!

CLIQUE NA IMAGEM ABAIXO E CONFIRA MAIS DETALHES:

CLIQUE AQUI E SAIBA MAIS

Dúvidas ou sugestões? Deixem nos comentários! Para mais dicas, acesse o nosso canal no YouTube:
https://youtube.com/criandobits

Tags:

Quer receber GRÁTIS o e-book "Como Formatar um Computador em 5 Minutos"?

Não enviamos spam. Seu e-mail está 100% seguro!

Sobre o Autor

Bene Silva Júnior
Bene Silva Júnior

Bacharel em Sistemas de Informação pelo Instituto Paulista de Pesquisa e Ensino IPEP. Apaixonado por tecnologias e games do tempo da vovó!

0 Comentários

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *