🔧 C# Design Pattern: Memento (Portugues)
Nachrichtenbereich: 🔧 Programmierung
🔗 Quelle: dev.to
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
...
🔧 C# Design Pattern: Memento (Portugues)
📈 66.39 Punkte
🔧 Programmierung
🔧 C# Design Pattern: Memento
📈 43.58 Punkte
🔧 Programmierung
🔧 C# Design Pattern: Iterator (Portugues)
📈 38.96 Punkte
🔧 Programmierung
🔧 C# Design Pattern: Interpreter (Portugues)
📈 38.96 Punkte
🔧 Programmierung
🔧 C# Design Pattern: Command (Portugues)
📈 38.96 Punkte
🔧 Programmierung
🔧 C# Design Pattern: Proxy (Portugues)
📈 38.96 Punkte
🔧 Programmierung
🔧 C# Design Pattern: Flyweight (Portugues)
📈 38.96 Punkte
🔧 Programmierung
🔧 C# Design Pattern: Facade (Portugues)
📈 38.96 Punkte
🔧 Programmierung
🔧 C# Design Pattern: Decorator (Portugues)
📈 38.96 Punkte
🔧 Programmierung
🔧 C# Design Pattern: Composite (Portugues)
📈 38.96 Punkte
🔧 Programmierung
🔧 C# Design Pattern: Bridge (Portugues)
📈 38.96 Punkte
🔧 Programmierung
🔧 C# Design Pattern: Adapter (Portugues)
📈 38.96 Punkte
🔧 Programmierung
🔧 C# Design Pattern: Visitor (Portugues)
📈 38.96 Punkte
🔧 Programmierung
🔧 C# Design Pattern: ObjectPool (Portugues)
📈 38.96 Punkte
🔧 Programmierung
🔧 C# Design Pattern: Template Method (Portugues)
📈 38.96 Punkte
🔧 Programmierung
🔧 C# Design Pattern: Prototype (Portugues)
📈 38.96 Punkte
🔧 Programmierung
🔧 C# Design Pattern: Strategy (Portugues)
📈 38.96 Punkte
🔧 Programmierung
🔧 C# Design Pattern: Builder (Portugues)
📈 38.96 Punkte
🔧 Programmierung
🔧 C# Design Pattern: State (Portugues)
📈 38.96 Punkte
🔧 Programmierung
🔧 C# Design Pattern: Factory Method (Portugues)
📈 38.96 Punkte
🔧 Programmierung
🔧 C# Design Pattern: Observer (Portugues)
📈 38.96 Punkte
🔧 Programmierung
🔧 C# Design Pattern: Singleton (Portugues)
📈 38.96 Punkte
🔧 Programmierung
🔧 C# Design Pattern: Mediator (Portugues)
📈 38.96 Punkte
🔧 Programmierung
🔧 Atomic Design no Frontend (português)
📈 28.06 Punkte
🔧 Programmierung
🔧 Memento
📈 27.43 Punkte
🔧 Programmierung
🍏 MacStories Unwind, Federico’s Film Fest: Memento
📈 27.43 Punkte
🍏 iOS / Mac OS
🔧 Design Pattern #3 - Observer Pattern
📈 27.05 Punkte
🔧 Programmierung
🔧 Design Pattern #2 - Facade Pattern
📈 27.05 Punkte
🔧 Programmierung