Flyweight

Descrição:

O padrão de projeto flyweight é um padrão estrutural utilizado quando existe a necessidade de se compartilhar uma grande quantidade de objetos idênticos de granularidade baixa para com baixo consumo de memória. No padrão flyweight a instância de um único objeto é compartilhada inúmeras vezes sem que haja a necessidade de s e instanciar objetos de mesmos atributos um a um.

Para a utilização do padrão flyweight é preciso compreender a diferença entre seus estados:

  • A estrutura básica do padrão flyewight é composta pelas seguintes classes:

  • Diagrama de Classes genérico do padrão: Flyweight

    Exemplo:

    No exemplo do livro temos um software de landscape design no qual é preciso dispor vários objetos em diferentes locais do mapa, cada árvore possui uma idade e um par de coordenadas. Após utilizar o software por uma semana, o cliente informa que ao instanciar uma quantidade muito elevada de objetos árvore há uma queda de desempenho.

    A ideia apresentada para a solução desse problema está em criar uma classe manager que contenha um array responsável por armazenar todos os estados do objeto árvore e alterar a estrutura da classe árvore para um objeto sem estado, com um método responsável por gerar o desenho da árvore no landscape. Uma única instância do objeto árvore é armazenada na classe manager para utilização de seu método de desenhar no landscape.

    Diagrama de Classes do exemplo:

    Flyweight

    Ver código fonte no Github