JS-0802 - JavaScript Completo ES6 - Factory Function

Funções criadoras de objetos
Factory Function é a implementação em JS de um dos padrões de projetos criacionais, o Factory Method, existente como em outras linguagens orientadas a objetos.
Este padrão encapsula a criação de objetos a partir de um de seus métodos, funcionando como uma fábrica de objetos propriamente dita. As funções retornam um objeto sem a necessidade da utilização da palavra-chave new. Além disso, os métodos são criados no próprio objeto, não no prototype, o que oferece uma melhoria de performance em casos de instanciação de um elevado número de objetos em uma mesma factory function.
Possuem basicamente a mesma função que as constructor functions e as classes. O retorno da função é puramente um objeto.
Por convenção, o nome de uma factory function começa com letra minúscula. Exemplo de uma função criadora de parágrafos:
O objeto tendo como propriedade o mesmo nome do valor, a partir do ES6 dispensa a declaração explícita (element: 'element', text: 'text').
Uma das vantagens da utilização factory é o isolamento de métodos e propriedades, tornando-os efetivamente privados. No exemplo acima as propriedades color e background não estão no retorno, portanto, inacessíveis, já a propriedade text está no retorno:
Para impedir que métodos e propriedades sejam modificados há o padrão Ice Factory, utilizando Object.freeze() no retorno. Ex:
Além de dispensar a utilização da palavra-chave new para a inicialização, factory function pode ser utilizada com uma constructor function.
No exemplo a seguir, utilizando os mesmos objetos, a função retornando o objeto instanciado em cada método interno permite o encadeamento de métodos sobre o objeto.