Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

David Ramires

Interface, Abstract class e Factory

Recommended Posts

Galera, afim de aprender mais sobre POO em .NET eu fiz um pequeno exemplo, onde para saber melhor do que se trata estou disponibilizando um link onde existe uma pequena DESCRIÇÃO, explicando qual seria a ideia do script:

 

Neste exemplo(WEB -> C#) eu usei: Interface, Abstract class e Factory, espero que possamos trocar informações e experiências sobre POO e aumentar ainda mais nossos conhecimentos. http://forum.imasters.com.br/public/style_emoticons/default/joia.gif

 

OBS: Vou Postar depois, como eu Faria o mesmo script, mas sem usar Interface, Abstract class!

 

 

INTERFACE

public interface IPersonagem
{
     string Nome { get; }
     Color Cor { get; }
     double Altura { get; }
     double Peso { get; }
     Int16 Agilidade { get; }
     IEnumerable<string> Movimentos { get; }
}

 

Classes

public abstract class PersonagemFactory
{
   public abstract IPersonagem CriarPersonagem();

     public virtual IEnumerable<string> Armas()
     {
         return new List<string>(){
              "Faca"
              ,"Machado de Ouro"                
              ,"Bigorna de Emperium"};
     }
 }

 

Classes dos Persosagens

Personagem 1

public class Vingador :IPersonagem
{
        #region IPersonagem Members

        public string Nome
        {
            get { return "El Vingador"; }
        }

        public System.Drawing.Color Cor
        {
            get { return Color.Red ; }
        }

        public double Altura
        {
            get { return 1.80; }
        }

        public double Peso
        {
            get { return 85.2; }
        }

        public short Agilidade
        {
            get { return 75; }
        }

        public System.Collections.Generic.IEnumerable<string> Movimentos
        {
            get
            {
                return new List<string>(){            
                "Haduken Carpado"
                ,"Kick Machado Vingador"
                ,"Especial Brujeria"};            
            }
        }

        #endregion
    }

    public class VingadorFactory : PersonagemFactory
    {
        public override IPersonagem CriarPersonagem()
        {
            return new Vingador();
        }       
    }

 

Personagem 2

public class Leona : IPersonagem
    {
        #region IPersonagem Members

        public string Nome
        {
            get { return "Leona"; }
        }

        public System.Drawing.Color Cor
        {
            get { return Color.Pink; }
        }

        public double Altura
        {
            get { return 1.55; }
        }

        public double Peso
        {
            get { return 59; }
        }

        public short Agilidade
        {
            get { return 80; }
        }

        public System.Collections.Generic.IEnumerable<string> Movimentos
        {
            get
            {
                return new List<string>(){            
                "Facão Carpado"
                ,"Extinsão Estelar"
                ,"Especial Faca na Barriga"};
            }
        }

        #endregion
    }

    public class LeonaFactory : PersonagemFactory
    {
        public override IPersonagem CriarPersonagem()
        {
            return new Leona();
        }

        public override IEnumerable<string> Armas()
        {
            return new List<string>(){
                 "Faca"
                ,"Leques"                
                ,"Granada US"};
        }       
    }

 

Personagem 3

public class BanBanBiguelo : IPersonagem
  {
        #region IPersonagem Members

        public string Nome
        {
            get { return "Ban-Ban Biguelô"; }
        }

        public System.Drawing.Color Cor
        {
            get { return Color.Black; }
        }

        public double Altura
        {
            get { return 1.68; }
        }

        public double Peso
        {
            get { return 75; }
        }

        public short Agilidade
        {
            get { return 50; }
        }

        public System.Collections.Generic.IEnumerable<string> Movimentos
        {
            get
            {
                return new List<string>(){            
                "Biguelo Carpado"
                ,"Mão de Fogo"
                ,"Especial Thunder Old Man"};
            }
        }

        #endregion
    }

    public class BanBanBigueloFactory : PersonagemFactory
    {
        public override IPersonagem CriarPersonagem()
        {
            return new BanBanBiguelo();
        }
    }

Como utilizar

//PersonagemFactory factory = new BanBanBigueloFactory();
            //PersonagemFactory factory = new LeonaFactory();
            PersonagemFactory factory = new VingadorFactory();

            IPersonagem personagem = factory.CriarPersonagem();

            lblnome.Text = personagem.Nome;
            lblAgilidade.Text = personagem.Agilidade.ToString();
            lblAltura.Text = personagem.Altura.ToString();
            lblPeso.Text = personagem.Peso.ToString();

            //a ideia com esse lblcor é depois desenhar um boneco(sabe aquele palito mesmo) 
            //conforme a COR dele, tipo uma foto ao lado das caracteristicas
            lblCor.BackColor = personagem.Cor;
            lblCor.Text = "........................";

            IEnumerable<string> movimentos = personagem.Movimentos;
            lstMovimentos.DataSource = movimentos;
            lstMovimentos.DataBind();
                        
            lstArmar.DataSource = factory.Armas();
            lstArmar.DataBind();

OBS: Dependendo de qual personagem eu queria escolher basta criar o objeto do mesmo, exemplo:

(o exemplo acima eu escolhi o Vingador, e os outros eu deixei comentado)

 

 

PersonagemFactory factory = new BanBanBigueloFactory();
ou

 

PersonagemFactory factory = new LeonaFactory();
ou

 

PersonagemFactory factory = new VingadorFactory();

É imprecindivel aos leitores que olharam o código vejam também a DESCRIÇÃO AQUI

 

Fico no aguardo de comentários, criticas ou sugestões!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.