Flyweight

Origem: Wikipédia, a enciclopédia livre.

Flyweight é um padrão de projeto de software apropriado quando vários objetos devem ser manipulados em memória sendo que muitos deles possuem informações repetidas. Dado que o recurso de memória é limitado, é possível segregar a informação repetida em um objeto adicional que atenda as características de imutabilidade e comparabilidade (que consiga ser comparado com outro objeto para determinar se ambos carregam a mesma informação).

Um exemplo é o processador de texto. Cada caractere representa um objeto que possui uma família de fonte, um tamanho de fonte e outras informações sobre o símbolo. Como imaginado, um documento grande com tal estrutura de dados facilmente ocuparia toda a memória disponível no sistema. Para resolver o problema, como muitas dessas informações são repetidas, o flyweight é usado para reduzir os dados. Cada objeto de caractere contém uma referência para outro objeto com suas respectivas propriedades.

Imutabilidade e igualdade[editar | editar código-fonte]

Para que seja seguro o compartilhamento entre clientes e threads, objetos Flyweight devem ser imutáveis. Objetos de Flyweight são por definição objetos de valor. A identidade de instância do objeto não possui nenhuma consequência se dois valores são considerados iguais.

Aplicabilidade[editar | editar código-fonte]

A eficiência desse padrão depende muito de como e onde ele é usado. Aplique o padrão Flyweight quando todas as condições a seguir forem verdadeiras:

  • uma aplicação utiliza um grande número de objetos.
  • os custos de armazenamento são altos por causa da grande quantidade de objetos.
  • a maioria dos estados dos objetos pode ser tornada extrínseca.
  • muitos grupos de objetos podem ser substituídos por relativamente poucos objetos compartilhados, uma vez que estados extrínsecos são removidos.
  • a aplicação não depende da identidade dos objetos. Uma vez que objetos Flyweights podem ser compartilhados, testes de identidade produzirão o valor verdadeiro para objetos conceitualmente distintos.

Ligações externas[editar | editar código-fonte]

Commons
Commons
O Commons possui imagens e outros ficheiros sobre Flyweight
Ícone de esboço Este artigo sobre informática é um esboço. Você pode ajudar a Wikipédia expandindo-o.