JavaScript–Factory Pattern

Desing Patterns & JavaScript

Criar objetos é a especialidade do Factory Pattern. A grande vantagem desse pattern é que ele reduz a duplicação das tarefas de inicialização em objetos similares, além de permitir abstrair construções que podem ser complexas.

Normalmente o método responsável por inicializar os objetos é um método estático, que no contexto do JavaScript pode ser adaptado para um método adicionado diretamente à função construtora.


function Usuario(attrs) {
    for (var nome in attrs) {
    this[nome] = attrs[nome];
    }
}

Usuario.build = function (attrs) {
    return new Usuario(attrs);
};

O Factory Pattern pode ser uma boa alternativa para evitar que funções construtoras não sejam chamadas sem a palavra-chave new. Para inicializar um novo usuário, podemos chamar a Factory Usuario.build.


var user = Usuario.build({
    nome: "Vitor Meriat",
    email: "vitormeriat@hotmail.com"
});

Ele também pode ser uma boa alternativa para normalizar parâmetros antes da instanciação; lembre-se que no JavaScript não existe sobrecarga de métodos. Imagine que você queira simplificar a instanciação de um novo objeto Usuario; caso um objeto seja passado como argumento, ele é utilizado. Se dois parâmetros forem passados, um objeto contendo o nome e e-mail deve ser definido antes.


Usuario.build = function (attrs) {
    if (arguments.length === 2) {
    attrs = {
    nome: arguments[0],
    email: arguments[1]
    };
    }
    return new Usuario(attrs);
};

O Factory Pattern é uma forma excelente de reduzir/remover complexidades na criação de objetos. Os exemplos deste artigo são simples, claro, mas não se deixe enganar. Factories podem ser extremamante complexos e tudo vai depender de quão complexo é a definição de seus objetos, podendo conter inclusive toda a parte de configuração.

 

Bom estudo e até a próxima!!!


Author's profile picture

Vitor is a computer scientist who is passionate about creating software that will positively change the world we live in.

MVP Azure - Cloud Architect - Data science enthusiast


1 minutes to read