3
respostas

Olá pessoal. Fiz esse código como exercício para o padrão Adapter. A ideia aqui é para funcionalidades para diferentes tipos de aparelhos domésticos.



    public interface IAparelho
    {
        string On();
        string Off();

    }

  public class TomadaABNT
    {

        private bool ligado;

        public bool Ligado
        {
            get { return ligado; }
            set
            {
                ligado = value;

                Console.WriteLine(">>> {0}ligando", ligado ? "" : "des");
            }
        }

    }


    public class Liquidificador : TomadaABNT, IAparelho
    {
        public string Off()
        {
            Ligado = false;
            return "O liquidificador está desligado.";
        }

        public string On()
        {
            Ligado = true;
            return "O liquidificador está ligado.";
        }
    }


    public class Lavadora : TomadaABNT, IAparelho
    {
        public string Off()
        {
            Ligado = false;
            return "A lavadora esta desligada";
        }

        public string On()
        {
            Ligado = true;

            Console.WriteLine("a lavadora esta lavando roupas.");

            Lavar();
            Centrifugar();  
            Enxaguar();
            return Off();
        }

        private void Enxaguar()
        {
            Thread.Sleep(1000);

            Console.WriteLine("\tenxaguando...");
        }

        private void Centrifugar()
        {
            Thread.Sleep(1000);

            Console.WriteLine("\tcentrifugando...");
        }

        private void Lavar()
        {
            Console.WriteLine("\tadicionando água e sabão em pó...");

            Thread.Sleep(2000);

            Console.WriteLine("\tlavando...");
        }
    }

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

            IAparelho a =  new Liquidificador();

            Console.WriteLine(a.On());

            Console.WriteLine(a.Off());

            Console.WriteLine();

            a = new Lavadora();

            Console.WriteLine(a.On());

            Console.ReadKey();

        }
    }
3 respostas

Tu ficou com alguma duvida referente ao capitulo ou apenas compartilhando o projeto de teste?

Apenas gostaria de saber se o exemplo do código que eu fiz, está correto para o padrão de projeto Adapter ?? Só isso

Olá, Maurício

Vejo que você pratica bastante a construção de design patterns para problemas do dia-a-dia, e isso é muito importante!

Sobre o seu código, vamos dar uma olhada em como seu Client instancia e utiliza o Adapter:

           IAparelho a =  new Liquidificador();
            Console.WriteLine(a.On());
            Console.WriteLine(a.Off());

Dando uma olhada na classe Liquidificador, acho que essa implementação não está seguindo o padrão Adapter.

Um Adapter serve para adaptar um componente incompatível para uma interface que ele não implementa.

Um caso de Adapter seria, por exemplo:

  • PROBLEMA: Um aparelho chamado TVImportada tem plug com pino chato, mas esse adaptador não funciona com a interface da tomada ABNT brasileira (interface ITomadaABNT. Esse aparelho precisa ser adaptado, ou seja, ele precisa ser um Adaptee.
  • SOLUÇÃO: usar um adaptador, Adapter, que será um "adaptador benjamin", classe AdaptadorBenjamin, que implementa ITomadaABNT e faz referência (depende de) à classe TVImportada.
public interface ITomadaABNT
{
    void PlugarPinosRedondos();
}
public class TVImportada : ITomadaPinoChato
{
    void PlugarPinosChatos()
    {
        .
        .
        .
    }
}
public class AdaptadorBenjamin: ITomadaABNT
{
    private readonly ITomadaPinoChato aparelhoAdaptado;

    public AdaptadorBenjamin()
    {
        aparelhoAdaptado = new TVImportada();
    }

    public void PlugarPinosRedondos()
    {
        aparelhoAdaptado .PlugarPinosChatos();
    }

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

        ITomadaABNT benjamin =  new AdaptadorBenjamin();
        benjamin.PlugarPinosRedondos();


        }
    }

O que acha?

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software