Padrão Memento

Aloha…

Preciso aplicar o padrão memento como comando do padrão Command, como faço isso ? O objectivo é fazer o comando Undo e Redo.

Faço estas duas classes como extends de AbstractAction e depois como é que aplico o Memento ?

Não entendi sua dúvida. Ao ser invocao o Command provavelmente deve assumir o paple de caretaker e invocar no objeto a ordem apra que ele ‘cuspa’ um memento.

Acho que você precisa dar uma rechecada no conceito do padrão

[quote=TelmaSofia]Aloha…

Preciso aplicar o padrão memento como comando do padrão Command, como faço isso ? O objectivo é fazer o comando Undo e Redo.

Faço estas duas classes como extends de AbstractAction e depois como é que aplico o Memento ? [/quote]

Vou supor para exemplificar, que se trata de um texto que vc quer fazer undo/redo, mas o raciocinio é válido para qq coisa
Vc tem que criar uma imagem ( “snapshot”) do estado daquilo que vc quer fazer undo/redo , no caso o texto.
Então , quando a pessoa altera alguma coisa no texto vc tira uma imagem
e guarda em ordem cronologia. Este é o seu memento (datahora+texto).
Depois vc cria dois Commands um que faz undo e outro que faz redo.
O undo pega o memento extamente anterior ao que está sendo usado e lança o texto de volta no editor. O redo, pega o memento extamente depois do que está sendo usado e lança o texto de volta ao editor.
De notar que o redo não funciona se vc alterar o texto depois do undo.

Básicamente é isto. O resto são detalhes de implementação (por exemplo, vc não precisa gravar todo o texto, apenas as alterações)

Há realmente a necessidade de Memento? Pq não guardar os próprios Commands? Assim não poreciso de ficar extraindo e fornecendo “Mementos”

Só se os commands forem reversíveis, o que provavelmente vai deixar tudo mais complicado. OTOH, undos infinitos com memento podem comer memória demais.

[quote=AllMighty]
Só se os commands forem reversíveis…[/quote]

O que vc quis dizer com isso?

Não intendi pq ficaria mais complicado guardar os cammands do que gerenciar mementos…

Porque com o memento o estado (interno) do objeto não seria violado. E é essa a idéia, manter o encapsulamento.

Só com commands uma inspecão chata seria necessaria. O command no caso é o próprio un(re)do.

Mas o fato é: se o seu command tá manipulando o objeto de maneira promiscua (a ponto de retornar/avancar o estado dele) então tem alguma coisa errada.

Show de bola é essa a proposta do padrão!

Não entendi o que vc quis dizer com “inspeção” mas td bem.

Realmente vc tem toda razão! Pensando aqui por alto pensei que só o command daria jeito, o que não é bem verdade. Pois o command só sabe manipular o objeto, não fazer com que ele volte ou vá para um determinado estado, para isso o cammand teria que violar o encapsulamento do objeto.

Se fosse na real só iria me tocar disso qdo tivesse implementando. Mas enfim…

Valew pela ajuda… Te devo essa…

[]s