C# Design Pattern: Memento (Portugues)

O padrão Memento é usado para capturar e armazenar o estado interno de um objeto, de forma que ele possa ser restaurado mais tarde sem violar o princípio de encapsulamento. É útil em situações onde você deseja implementar a funcionalidade de “desfazer”…


This content originally appeared on DEV Community and was authored by Juarez Júnior

O padrão Memento é usado para capturar e armazenar o estado interno de um objeto, de forma que ele possa ser restaurado mais tarde sem violar o princípio de encapsulamento. É útil em situações onde você deseja implementar a funcionalidade de "desfazer" ou "restaurar" em um sistema, como em editores de texto que permitem desfazer alterações.

Exemplo de Código em C#:

// Classe Memento que armazena o estado
public class Memento
{
    public string Estado { get; private set; }

    public Memento(string estado)
    {
        Estado = estado;
    }
}

// Classe Originator que usa o Memento para salvar e restaurar seu estado
public class Originator
{
    public string Estado { get; set; }

    public Memento SalvarEstado()
    {
        return new Memento(Estado);
    }

    public void RestaurarEstado(Memento memento)
    {
        Estado = memento.Estado;
    }
}

// Classe Caretaker que gerencia o histórico dos estados
public class Caretaker
{
    private Stack<Memento> _historico = new Stack<Memento>();

    public void Salvar(Originator originator)
    {
        _historico.Push(originator.SalvarEstado());
    }

    public void Desfazer(Originator originator)
    {
        if (_historico.Count > 0)
        {
            originator.RestaurarEstado(_historico.Pop());
        }
    }
}

class Program
{
    static void Main(string[] args)
    {
        Originator originator = new Originator();
        Caretaker caretaker = new Caretaker();

        // Definir o estado e salvar
        originator.Estado = "Estado 1";
        caretaker.Salvar(originator);

        // Alterar o estado e salvar
        originator.Estado = "Estado 2";
        caretaker.Salvar(originator);

        // Alterar o estado novamente
        originator.Estado = "Estado 3";
        Console.WriteLine($"Estado atual: {originator.Estado}");

        // Desfazer para o estado anterior
        caretaker.Desfazer(originator);
        Console.WriteLine($"Após desfazer: {originator.Estado}");

        // Desfazer novamente
        caretaker.Desfazer(originator);
        Console.WriteLine($"Após desfazer novamente: {originator.Estado}");
    }
}

Explicação do Código:
Neste exemplo, a classe Originator tem um estado que pode ser salvo e restaurado. A classe Memento armazena o estado do Originator, enquanto a classe Caretaker mantém um histórico dos estados salvos e permite desfazer as alterações. No programa principal, o estado do Originator é alterado várias vezes, e as operações de desfazer restauram os estados anteriores.

Conclusão:
O padrão Memento é ideal para sistemas que precisam salvar e restaurar estados anteriores de objetos, como em editores de texto ou sistemas de versão. Ele permite implementar a funcionalidade de "desfazer" sem violar o encapsulamento dos objetos.

Código fonte: GitHub


This content originally appeared on DEV Community and was authored by Juarez Júnior


Print Share Comment Cite Upload Translate Updates
APA

Juarez Júnior | Sciencx (2024-10-11T12:00:00+00:00) C# Design Pattern: Memento (Portugues). Retrieved from https://www.scien.cx/2024/10/11/c-design-pattern-memento-portugues/

MLA
" » C# Design Pattern: Memento (Portugues)." Juarez Júnior | Sciencx - Friday October 11, 2024, https://www.scien.cx/2024/10/11/c-design-pattern-memento-portugues/
HARVARD
Juarez Júnior | Sciencx Friday October 11, 2024 » C# Design Pattern: Memento (Portugues)., viewed ,<https://www.scien.cx/2024/10/11/c-design-pattern-memento-portugues/>
VANCOUVER
Juarez Júnior | Sciencx - » C# Design Pattern: Memento (Portugues). [Internet]. [Accessed ]. Available from: https://www.scien.cx/2024/10/11/c-design-pattern-memento-portugues/
CHICAGO
" » C# Design Pattern: Memento (Portugues)." Juarez Júnior | Sciencx - Accessed . https://www.scien.cx/2024/10/11/c-design-pattern-memento-portugues/
IEEE
" » C# Design Pattern: Memento (Portugues)." Juarez Júnior | Sciencx [Online]. Available: https://www.scien.cx/2024/10/11/c-design-pattern-memento-portugues/. [Accessed: ]
rf:citation
» C# Design Pattern: Memento (Portugues) | Juarez Júnior | Sciencx | https://www.scien.cx/2024/10/11/c-design-pattern-memento-portugues/ |

Please log in to upload a file.




There are no updates yet.
Click the Upload button above to add an update.

You must be logged in to translate posts. Please log in or register.