Padrão para atribuir responsabilidades: Creator
Problema
- Quem deve criar novas instâncias de uma classe?
Solução
- Atribuir à classe B a responsabilidade de criar instância da
classe A se uma das seguintes condições se aplicar:
- B agrega objetos da classe A
- B contém objetos da classe A
- B registra instâncias da classe A
- B usa muitos objetos da classe A
- B possui os dados usados para inicializar A
- B é um criador (creator) de objetos da classe A
- Se mais de uma opção se aplica, escolha o B que agregue ou contenha objetos da classe
A
Exemplo
- No exemplo anterior (Terminal Ponto-De-Venda - TPDV), quem deveria criar uma instância
de LinhaDetalheVenda?
- Pelo padrão Creator, precisamos achar alguém que agrega, contém, ... instâncias de
LinhaDetalheVenda
- Considere o modelo conceitual parcial abaixo:

- Venda agrega instâncias de LinhaDetalheVenda e é portanto um bom candidato para criar
as instâncias
- Chegamos aos seguintes diagramas:

Discussão
- Escolhemos um criador que estará conectado ao objeto criado, de qualquer forma, depois
da criação
- Isso leva a fraco acoplamento
- Exemplo de criador que possui os valores de inicialização
- Uma instância de Pagamento deve ser criada
- A instância deve receber o total da venda
- Quem tem essa informação? Venda
- Venda é um bom candidato para criar objetos da classe Pagamento
Conseqüências
- Fraco acoplamento, já que o objeto criado deve normalmente ser visível ao criador,
depois da criação
programa