1
resposta

Olá. Fiz esse outro modelo de Padrão Memento, gostaria de saber se está ok ?? O exemplo do código foi de um jogador em um jogo qualquer.

 public class Jogador
    {

        public int Nivel;
        public int Placar;
        public string Percentual;


        public Estado CriaEstado(Jogador jogador)
        {
            return new Estado(jogador.Nivel, jogador.Placar, jogador.Percentual);
        }

        public void RestauraEstado(Estado estadoJogador)
        {
            Nivel = estadoJogador.Nivel;
            Placar = estadoJogador.Placar;
            Percentual = estadoJogador.Percentual;
        }

        public void DisplayInfoJogador()
        {
            Console.WriteLine("Nivel: " + Nivel);
            Console.WriteLine("Placar: " + Placar);
            Console.WriteLine("Percentual: " + Percentual);
        }

    }

  public class Estado
    {

        public int Nivel;
        public int Placar;
        public string Percentual;

        public Estado(int nivel,int placar,string percentual)
        {
            Nivel = nivel;
            Placar = placar;
            Percentual = percentual;
        }

    }

 public class Historico
    {

        public Estado Estado;

    }

 class Program
    {
        static void Main(string[] args)
        {

            Jogador jogador = new Jogador();

            jogador.Nivel = 1;
            jogador.Placar = 100;
            jogador.Percentual = "100%";
            Console.WriteLine("--------- Informação do jogador apos completar o Nivel 1 -----------");
            jogador.DisplayInfoJogador();

            //  Quando o jogador completar qualquer nível, crie um ponto de verificação para esse nível.

            Historico historico = new Historico();
            historico.Estado = jogador.CriaEstado(jogador);

            Thread.Sleep(2000);

            jogador.Nivel = 2;
            jogador.Placar = 130;
            jogador.Percentual = "80%";
            Console.WriteLine("--------- Informação do jogador apos completar o Nivel 2 -----------");
            jogador.DisplayInfoJogador();

            // Se os jogadores perderem toda a linha de vida, então, restaure o jogo a partir do nível 1

            jogador.RestauraEstado(historico.Estado);
            Console.WriteLine("--------- Informação do jogador apos restaurar o nivel 1 ----------");
            jogador.DisplayInfoJogador();

            Console.ReadLine();


        }
    }
1 resposta

Olá, Maurício, acho que o código está ok sim, eu apenas modificaria um pouco a classe Estado para encapsular os campos em propriedades, com get e set. Assim as propriedades ficariam públicas e os campos internos como private (protegidos de acesso externo direto).