Tip:
Highlight text to annotate it
X
SNAPSHOT Padrão de Projeto
Origem O padrão Snapshot é originado do Memento documentado em Gof (Gang of Four) 95
A grosso modo a tradução para o português brasileiro seria "Instantâneo"
Objetivo Capturar o estado de um objeto sendo que o mesmo poderá ser restaurado quando necessário
Aplicação O Snapshot é utilizado quando se está trabalhando com aplicações longas que não se tem ideia de quantos dias irá levar para se concluir
Exemplo: Jogo de vídeo-games onde o jogador vai passando por fases, salva o jogo e quer retornar de onde parou dias atrás
Aplicação (Exemplo) Mario World. Para salvar será necessário gravar as fases que ja foram passadas, a quantidade de vida e os itens que o jogador possui
Quando resolver carregar um estado salvo, esses dados serão carregados e o jogo voltará para o estado anterior
Funcionamento O Snapshot pode ser implementado de duas maneiras: através do Memento ou com Serialização
Estrutura Genérica Snapshot Usando Memento
Caretaker é a classe que possui a lista de estados salvos Memento é a classe que guarda um estado Originator seria uma classe correspondente aos dados de um jogador, por exemplo
O Originator inicializa um dado e seta ele no memento, mas os dados ainda não foram salvos, apenas guardados. O dado só é salvo quando o Caretaker adiciona na lista. Isso é feito para a proteção dos dados
Participantes Snapshot Usando Memento
Originator: é um classe cuja as informações do estado deve ser conservado e restaurado
Memento: Seu objetivo é encapsular snapshots do estado de um objeto Originator
Caretaker: Instâncias desta classe mantêm uma coleção de objetos de Memento
Estrutura Genérica Snapshot Usando Serialização
Há também a possibilidade de fazer o SnapShot através de arquivos binários. Como visto no diagrama
Participantes Snapshot Usando Serialização
Target: È o objeto alvo da serialização e desserialização
ObjectOutputStream: descobre e acessa as informações de um objeto Target e grava-o em um fluxo de bytes com informações adicionais
OutputStream: Instância responsável por diferenciar entre salvar na memória ou em forma de arquivo
ObjectinputStream: Instância dessas classes serializadas lêem informações do estado a partit de um fluxo de bytes e restauram-no
Consequências As duas formas de implementar o padrão Snapshot trazem muito da complexidade de salvar e restaurar o estado de um objeto
O padrão Snapshot não é muito apropiado para desfazer uma sequência de comandos. Fazendo muitos snapshots de um objeto ele pode consumir uma quantidade grande de armazenamento
Exemplo Genérico Neste caso genérico a classe fonte é quem possui os dados, para salvá-los deve-se utilizar o Memento Veremos isso funcionar melhor no exercício
Aqui vemos o main, verificamos que o programa é um jogo e quer salvar algumas fases e depões carrega-las
Originator é a classe que possui o dado da fase do jogo, nesse caso o dado é apenas uma string
Memento é como uma classe auxiliar para guardar o estado
Caretaker adiciona o Memento na lista, este Memento é retornado pela função Salva Memento da classe Originator
Essa é a solução Snapshot
Os slides e a resolução do problema foram feitos por: Rick Andrade, Vagner Fonseca, Yuri Guimarães
A video aula foi feita pelos aluno: Alan Deivite e Mario Bortoli