• Ramon Ferreira Silva

Creator – Padrões GRASP


Padrão Creator


O segundo padrão do catálogo GRASP, é o Creator, este padrão é responsável por atribuir a responsabilidade de criação de objetos.


Atribuições do Creator


O paradigma da orientação a objetos trata-se de uma coleção de objetos que interagem entre si, mas a quem cabe a atribuição de criar esses objetos? Afinal se qualquer  classe sair criando objetos, podemos ter graves violações de encapsulamento, responsabilidades e  alto acoplamento.


O padrão Creator veio para dar ordem a esse caos, segundo o padrão, para uma classe B ter a responsabilidade de criar instâncias de outra classe A, ele deve obedecer a mais de um dos requisitos abaixo:

  1. B agrega objetos da classe A.

  2. B contém objetos da classe A.

  3. B registra instâncias da classe A.

  4. B usa muitos objetos da classe A.

  5. B possui os dados usados para inicializar A.


Uso de um Creator


O uso mais comum creator é quando criamos um Factory para encapsular criação instâncias de nossos objetos. Assim o objeto consumidor apenas decide qual instancia quer utilizar. Quando usamos o padrão de Inversão de Dependências, criamos uma camada de abstração intermediaria que fica responsável por criar as instancias dos objetos e relaciona-los.

Exemplo de Uso do Creator


Supondo que temos uma classe pedido, ela possui itens do pedido, esses itens são criados a partir dos dados de um produto.


Pedido fica responsável por criar instâncias de PedidoItem

Uso correto do creator

class Pedido {

    private List itens;
    
    public void criarNovoPedidoItem(Produto produto) {
        //Criamos a instancia de pedido item
        PedidoItem pedidoItem = new PedidoItem(produto);
        this.itens.add(pedidoItem);
    }
}

class Produto {
    
    private String nome;
    private String preco;
    
}

class PedidoItem {
    
    private String nome;
    private String precoUnitario;
    private int quantidade;
    
    public PedidoItem(Produto produto){
        this.nome = produto.getNome();
        this.precoUnitario = produto.getPreco();
        this.quantidade = 1;
    }
    
}

Abaixo temos como seria se não usássemos o creator.

public static void main(String[] args){
    
    //Criamos a instancia de pedido
    Pedido pedido = new Pedido();
    
    //Criamos um produto
    Produto produto = new Produto();
    produto.setNome("Fatia de Pizza");
    produto.setPreco(3.50);
    
    //Criamos o pedido item, violando o encapsulamento
    PedidoItem pedidoItem = new PedidoItem(produto);
    
    //E ficamos sabendo a implementacao interna do objeto pedido
    pedido.getItens().add(pedidoItem);
    
}


Conclusão


O Padrão Creator foi criado para dar ordem no caos que pode se tornar a criação de Objetos no sistema, atribuindo a responsabilidade de criação ã classes que realmente fazem sentido ter essa atribuição. Desse modo seu código fica mais fácil de manter e de testar.

Alguma dúvida ou sugestão? Deixe um comentário.


#GRASP #SOLID #OrientaçãoaObjetos #PadrõesdeProjeto #creator #BoasPráticas #EngenhariadeSoftware #ArquiteturadeSoftware

0 visualização