Padrão de Projeto Factory em JavaScript

Padrão de Projeto Factory em JavaScript.

O Padrão de Projeto Factory consiste em uma classe ser especializada na criação de um determinado tipo de objeto. Geralmente, esse padrão é utilizado para abstrair a criação de objetos complexos.

Vamos utilizar o Factory para abstrair a complexidade de criação de um Proxy.

Continuaremos o mesmo projeto utilizado para explicar o Padrão de Projeto Proxy.

Inicialmente, criamos a pasta services no projeto e, dentro dela, a classe ProxyFactory.

Não é uma regra em si, mas quando implementamos o padrão Factory, utilizamos métodos estáticas, de modo a não criar instâncias da classe ao utilizá-la.

Em seguida, recortamos nosso Proxy que atualmente encontra-se na classe ContatosController do projeto, inserindo-o no método create da classe ProxyFactory, e fazemos as adaptações necessárias.

class ProxyFactory {
	
	static create(objeto, props, acao) {

		return new Proxy(objeto, {
			get(target, prop, receiver) {

				if(ProxyFactory._ehFuncao(target[prop]) && props.includes(prop)) {

					return function() {
						Reflect.apply(target[prop], target, arguments);
						acao(target);
					}
				}

				return Reflect.get(target, prop, receiver);
			}
		});
	}

	static _ehFuncao(func) {

		return typeof(func) == typeof(Function);
	}
}

Aproveitamos também para criar o método privado _ehFuncao, melhorando a legibilidade e manutenção do código.

Agora em ContatosController, passamos a criar nosso proxy da lista de contatos com o auxílio do método estático create da classe ProxyFactory.

class ContatosController {

	constructor() {

		let $ = document.querySelector.bind(document);

		this._listaDeContatos = ProxyFactory.create(
			new ListaDeContatos(),
			['adiciona', 'apaga'],
			model => this._contatosView.update(model)
		);

    //Restante do código omitido

Mas não devemos esquecer também de importar o ProxyFactory em nosso arquivo html.

Com isso, agora toda vez que precisarmos criar um proxy, basta pedir ao ProxyFactory que faça isso para nós. Dessa forma, ganhamos também em reaproveitamento de código.

Artigos Relacionados

Ir para o topo