public class Livro
{
private string _isbn;
private string _title;
private string _author;
private DateTime ultimaData;
public string ISBN
{
get { return _isbn; }
set
{
_isbn = value;
UltimaData();
}
}
public string Title
{
get { return _title; }
set
{
_title = value;
UltimaData();
}
}
public string Author
{
get { return _author; }
set
{
_author = value;
UltimaData();
}
}
public Livro()
{
UltimaData();
}
private void UltimaData()
{
ultimaData = DateTime.UtcNow;
}
public Memento CreateUndo()
{
return new Memento(_isbn, _title, _author, ultimaData);
}
public void RestoreFromUndo(Memento memento)
{
_title = memento.Title;
_author = memento.Author;
_isbn = memento.ISBN;
ultimaData = memento.UltimaData;
}
public void ShowBook()
{
Console.WriteLine("{0} - '{1}' por {2}, editado em {3}.", ISBN, Title, Author,ultimaData);
}
}
public class Memento
{
public string ISBN { get; private set; }
public string Title { get; private set; }
public string Author { get; private set; }
public DateTime UltimaData { get; private set; }
public Memento(string isbn, string title, string author, DateTime ultimaData)
{
ISBN = isbn;
Title = title;
Author = author;
UltimaData = ultimaData;
}
}
public class Historico
{
public Memento Memento { get; set; }
}
class Program
{
static void Main(string[] args)
{
Historico historico = new Historico();
// Inicia um livro
Livro livro = new Livro();
livro.ISBN = "0450488357";
livro.Title = "The Tommyknockers";
livro.Author = "Stephen King";
livro.ShowBook();
System.Threading.Thread.Sleep(2000);
Console.WriteLine();
// define o ponto para desfazer
historico.Memento = livro.CreateUndo();
// Modifica o livro
livro.ISBN = "0330376144";
livro.Title = "The Rats";
livro.Author = "James Herbert";
livro.ShowBook();
Console.WriteLine();
// Desfaz
livro.RestoreFromUndo(historico.Memento);
livro.ShowBook();
Console.WriteLine();
}
}