Buscar

Trabalho Flyweight


Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original

Padrões de projetos
flyweight
Minimiza o uso de recursos ao se trabalhar com um grande volume de objetos
1
Padrão de Projeto - Flyweight
O padrão Flyweight é um tipo de padrão de design que é utilizado basicamente para minimizar o uso de recursos quando se trabalha com um grande volume de objetos. 
Ao criarmos muitos objetos idênticos, o Flyweight pode diminuir a quantidade de memória que está sendo usada para um nível, de certa forma, administrável.
2
Pra que serve?
O Durante o desenvolvimento nos deparamos com algumas situações em que precisamos utilizar várias instâncias de classes e, muitas vezes, essas instâncias são repetidas.
No final, acabamos com vários objetos do mesmo tipo em memória.
A principal intenção deste padrão é estruturar objetos de modo que eles possam ser compartilhados entre diversos contextos.
Não utiliza ponteiros, para evitar o consumo excessivo de memória. 
Chama sub-rotinas para acessar os dados. 
É usado para reduzir o consumo de memória e a quantidade de dados 
Compartilha objetos em vários contextos simultaneamente
3
Aplicando o Padrão Flyweight
Agora que já conhecemos as características do Padrão Flyweight, vamos mostrar a utilização deste padrão diretamente no código, utilizando a linguagem JAVA. Trataremos como exemplo, novamente, a programação de um jogo.
Quando devo usar?
Para um resultado efetivo, o Padrão Flyweight depende fortemente de como e onde ele é usado.
Quando se trabalha com um grande número de instâncias de objetos, que possuam uma característica comum ou informações repetidas.
Se utiliza o Padrão Flyweight, quando todas as características citadas ao lado forem verdadeiras: 
A aplicação usa um grande número de objetos 
A maior parte dos estados dos objetos pode ser extrínseco 
Custos de armazenamento são grandes por causa da grande quantidade de objetos 
A aplicação não depende da identidade do objeto
5
Principais desvantagens
Dependendo da quantidade e da organização dos objetos a serem compartilhados, pode haver um grande custo para a procura deles. Então, ao utilizar este padrão deve-se analisar quais serão as prioridades no projeto, o espaço ou tempo de execução.
6
Exemplo prático da aplicação do padrão
7
Exemplificando
Para exemplificar o uso do Padrão Flyweight, utilizaremos como base de pesquisa o desenvolvimento de jogos, que é uma das plataformas que mais utiliza esse Padrão Estrutural.
8
Flyweight
Agora vamos tentar exemplificar a programação de um jogo.
Flyweight
Utilizaremos como exemplo, jogos tradicionais e bastante conhecidos, como o famoso Mario e a Lenda de Zelda.
Em ambos os jogos podemos perceber que existem imagens idênticas. Agora imaginem que cada uma dessas imagens seja um objeto independente. O tratamento de todos esses objetos seria muito complexo e custoso.
O que tornaria o consumo de memória muito maior, tornando o programa ou o jogo mais lento.
Flyweight
Redução de Dados
Para resolver este problema, como muitas das informações contidas nos objetos são repetidas, o Flyweight é
utilizado para reduzir os dados.
Flyweight
Cada objeto possui uma referência para outro objeto, com suas respectivas propriedades.
Desta forma, o consumo de memória e a quantidade de dados, são reduzidos drasticamente.
Problema:
Nós vimos no exemplo anterior que o desenvolvimento de jogos são utilizadas várias imagens. Elas representam as entidades que compõe o jogo, por exemplo: cenários, jogadores, inimigos, entre outros. Ao criar classes que representam estas entidades, é necessário vincular a elas um conjunto de imagens, que representam as animações.
Quem desenvolve jogos pode ter pensado na duplicação de informação quando as imagens são criadas pelos objetos que representam estas entidades, por exemplo, a classe que representa um inimigo carrega suas imagens. Quando são exibidos vários inimigos do mesmo tipo na tela, o mesmo conjunto de imagens é criado repetidamente.
A solução para esta situação de duplicação de informações pelos objetos é a utilização do padrão Flyweight.
Flyweight
A intenção do padrão:
Usar compartilhamento para suportar eficientemente grandes quantidades de objetos de granularidade fina. 
Flyweight
Vamos então ao código da imagem e do ponto:
Flyweight
Para simplificar o exemplo, será apenas exibida uma mensagem no terminal, indicando que a imagem foi desenhada.
A classe Flyweight vai apenas fornecer a interface para desenho da imagem em um ponto.
Flyweight
Outro componente da estrutura do Flyweight é a classe Flyweight concreta, que implementa a operação de fato
Nesta classe também será apenas exibida uma mensagem no terminal para dizer que a imagem foi desenhada no ponto dado
Flyweight
O próximo componente consiste em uma classe fábrica, que vai criar os vários objetos Flyweight que serão compartilhados.
Flyweight
Para exemplificar a utilização do padrão, vamos usar o seguinte código no método principal:
Flyweight
É exibido um conjunto de imagens para exemplificar o uso em um jogo. São desenhados inimigos de vários tipos, o cenário do jogo e o jogador. Note que o acesso aos objetos fica centralizado apenas na classe fábrica.
No desenvolvimento de jogos real, as referências dos objetos seriam espalhadas pelas entidades, garantindo a não duplicação de conteúdo.
Flyweight
FIM

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Continue navegando