Skip to content

Instantly share code, notes, and snippets.

@paulogesualdo
Last active August 18, 2022 12:45
Show Gist options
  • Save paulogesualdo/e2f9a9d53c4563c2d5c22800dabafb63 to your computer and use it in GitHub Desktop.
Save paulogesualdo/e2f9a9d53c4563c2d5c22800dabafb63 to your computer and use it in GitHub Desktop.
Example of the Factory Design Pattern
// É possível atribuir um objeto a uma variável
let pessoa = {};
// O imprimir, será impresso apenas um objeto
console.log(`Pessoa antes de atribuições: `);
console.log(pessoa);
// É possível realizar atribuições a esse objeto
pessoa.nome = 'Paulo';
pessoa.sobrenome = 'Gesualdo';
// E também imprimir essas atribuições
console.log(`Pessoa após atribuições: `);
console.log(pessoa);
// É possível fazer uma função pra fabricar objetos
function criarObjeto(){
return {};
}
// Ao chamar essa função, ela "solta" um objeto, como uma fábrica
let objeto = criarObjeto();
// Ao imprimir, é impresso apenas o objeto
console.log(`Objeto fabricado: `);
console.log(objeto);
// Da mesma forma, é possível fazer uma função para fabricar pessoas
function fabricarPessoas(nome, sobrenome){
let pessoa = {};
pessoa.nome = nome;
pessoa.sobrenome = sobrenome;
return pessoa;
}
// Ao chamar a função, já passar como parâmetros os atributos dessa pessoa
let pessoaFabricada = fabricarPessoas('Paulo', 'Gesualdo');
// E imprimir essa pessoa com seus atributos
console.log(`Pessoa fabricada: `);
console.log(pessoaFabricada);
// Também é possível colocar uma função dentro da fábrica, que fabrique um atributo
function fabricarPessoas2(nome, sobrenome){
let pessoa = {};
pessoa.nome = nome;
pessoa.sobrenome = sobrenome;
function nomeCompleto (){
return `${pessoa.nome} ${pessoa.sobrenome}`;
}
pessoa.nomeCompleto = nomeCompleto;
return pessoa;
}
// Ao chamar a função passando alguns parâmetros iniciais
let pessoaFabricada2 = fabricarPessoas2('Paulo', 'Gesualdo');
// É possível imprimir os parâmetros iniciais
console.log(`Pessoa fabricada 2: `);
console.log(pessoaFabricada2);
// Bem como imprimir também o atributo que foi fabricado
console.log(`Nome completo:`);
console.log(pessoaFabricada2.nomeCompleto());
Pessoa antes de atribuições:
{}
Pessoa após atribuições:
{ nome: 'Paulo', sobrenome: 'Gesualdo' }
Objeto fabricado:
{}
Pessoa fabricada:
{ nome: 'Paulo', sobrenome: 'Gesualdo' }
Pessoa fabricada 2:
{
nome: 'Paulo',
sobrenome: 'Gesualdo',
nomeCompleto: [Function: nomeCompleto]
}
Nome completo:
Paulo Gesualdo
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment