Flyweight
"Usar compartilhamento para suportar grandes quantidades
de objetos refinados eficientemente." [GoF]
Quando usar Flyweight:
•Quando o tamanho do conjunto de objetos for
significativamente menor que a quantidade de vezes em
que eles são usados na aplicação
•Quando objetos podem ser usados em diferentes
contextos ao mesmo tempo (agindo sempre como um
objeto indepentente)
Quando não usar:
•Quando o estado dos objetos não for imutável (é preciso
passar o estado mutável como parâmetro e isto pode ser
impraticável se o estado consistir de vários objetos)
•Quando for necessário elaborar um algoritmo ou algo
complicado para separar objetos mutáveis de imutáveis.
A finalidade dos demais é:
Strategy:Definir uma família de algoritmos, encapsular cada um, e fazê-los
intercambiáveis
Composite:Permitir o tratamento de objetos individuais e
composições desses objetos de maneira uniforme
Builder: Separar a construção de objeto complexo da representação
para criar representações diferentes com mesmo processo
State:Permitir a um objeto alterar o seu comportamento quanto o seu
estado interno mudar