Padrões de desenho
Os dez padrões do programa, escolhidos pelo problema e pelas suas consequências.
Por problema, não por nome
Padrão é colaboração com problema e custo. Identifica cliente, decisão que varia e contrato antes do nome.
| Variação | Padrão e decisão |
|---|---|
| Algoritmo escolhido | Strategy: contexto delega na estratégia; configuração escolhe. |
| Reação pelo ciclo de vida | State: estado atual decide e transita; enumeração com condições pode chegar. |
| Pedido guardado ou enfileirado | Command: invocador chama o objeto pedido; undo guarda estado anterior e política. |
Três ticks com pausa no meio dão dois avanços. Undo de +3 limitado de 3 para 4 repõe 3, não aplica -3. Efeitos externos podem não ter inverso.
Notificações e árvores
Observer: sujeito notifica inscritos pelo contrato, sem conhecer classes concretas. Altera para estado válido, depois notifica. Push envia o valor, pull deixa consultar.
Contrato fixa subscrição, remoção e falha de callbacks. Com cópia da lista, quem sai durante a notificação recebe a atual mas não a seguinte. Subscrição esquecida retém objetos e eventos.
Composite: folhas e grupos pela mesma interface. No grupo de inimigos do exemplo, o grupo interior soma os soldados de força 2 e 7 e dá 9; o grupo exterior soma o soldado de força 4 com o interior e dá 13; um grupo vazio dá 0. Acrescentar filhos pode ficar só no grupo. Partilha conta repetido; ciclos exigem regras. Não é a posse da composição UML.
Criação e embrulho
- Factory Method: subclasses do criador redefinem a criação.
Guerreirodá espada,Magodá feitiço;atacar()não escolhe classes.switchestático não é esta colaboração. Não chames redefiníveis no construtor da base. - Abstract Factory: objeto fábrica dá a família. Trocar Medieval por Espacial troca inimigo e arma sem tocar o cliente. Família nova é outra fábrica; produto novo (
criarEscudo) muda o contrato e todas as fábricas. - Adapter traduz interface existente; Decorator envolve conservando a interface e somando comportamento. Adapter de 12 euros dá 1200; entrega de 250 dá 1450. Ordem importa: desconto de 10% e entrega de 200 dão 1100 ou 1080 conforme a ordem.
- Cadeia que consulta a base em cada chamada acompanha mudanças (1000 dá 1080, 600 dá 720); snapshot no construtor congela. Delegar não é notificar a vista.
- Singleton: criação antecipada protege a instância, não campos mutáveis nem isolamento de testes. Configuração única monta-se uma vez e injeta-se.