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