DEV Community

Juarez Júnior for Develop4Us

Posted on • Edited on

1

C# Design Pattern: Facade (Portugues)

O padrão Facade é utilizado para simplificar a interação com sistemas complexos, fornecendo uma interface única e fácil de usar. Ele esconde os detalhes internos de subsistemas complicados, permitindo que você execute operações sem precisar se preocupar com a complexidade por trás. Um exemplo seria um sistema de home theater, onde você pode ligar vários dispositivos (TV, DVD player, som) com um único comando, sem precisar ligar cada um individualmente.

Exemplo de Código em C#:

// Subsistema complexo: TV
public class TV
{
    public void Ligar()
    {
        Console.WriteLine("TV ligada.");
    }

    public void DefinirCanal(int canal)
    {
        Console.WriteLine($"Canal definido para {canal}.");
    }
}

// Subsistema complexo: DVD player
public class DVDPlayer
{
    public void Ligar()
    {
        Console.WriteLine("DVD player ligado.");
    }

    public void Reproduzir()
    {
        Console.WriteLine("Reproduzindo DVD.");
    }
}

// Subsistema complexo: Sistema de Som
public class SistemaDeSom
{
    public void Ligar()
    {
        Console.WriteLine("Sistema de som ligado.");
    }

    public void DefinirVolume(int volume)
    {
        Console.WriteLine($"Volume definido para {volume}.");
    }
}

// Facade: Home Theater
public class HomeTheaterFacade
{
    private TV _tv;
    private DVDPlayer _dvdPlayer;
    private SistemaDeSom _som;

    public HomeTheaterFacade(TV tv, DVDPlayer dvdPlayer, SistemaDeSom som)
    {
        _tv = tv;
        _dvdPlayer = dvdPlayer;
        _som = som;
    }

    public void AssistirFilme()
    {
        Console.WriteLine("Iniciando o Home Theater...");
        _tv.Ligar();
        _tv.DefinirCanal(3);
        _dvdPlayer.Ligar();
        _dvdPlayer.Reproduzir();
        _som.Ligar();
        _som.DefinirVolume(20);
        Console.WriteLine("Tudo pronto, aproveite o filme!");
    }
}

class Program
{
    static void Main(string[] args)
    {
        // Criando os subsistemas
        TV tv = new TV();
        DVDPlayer dvdPlayer = new DVDPlayer();
        SistemaDeSom som = new SistemaDeSom();

        // Usando a facade
        HomeTheaterFacade homeTheater = new HomeTheaterFacade(tv, dvdPlayer, som);
        homeTheater.AssistirFilme();
    }
}
Enter fullscreen mode Exit fullscreen mode

Explicação do Código:

Aqui temos três sistemas separados: uma TV, um DVD player e um sistema de som. Sem o padrão Facade, você teria que ligar e configurar cada um desses sistemas individualmente. O HomeTheaterFacade faz esse trabalho para você, ligando todos os sistemas necessários e ajustando os parâmetros de forma simples com apenas um comando. No código principal, ao chamar AssistirFilme, todo o processo é automatizado e fácil de usar.

Conclusão:

O padrão Facade é ideal quando você deseja simplificar interações com sistemas complexos, fornecendo uma interface fácil de usar. Ele ajuda a reduzir o acoplamento entre as partes de um sistema, ocultando detalhes complicados e fornecendo uma maneira mais simples de interagir com ele.

Código fonte: GitHub

AWS Q Developer image

Your AI Code Assistant

Implement features, document your code, or refactor your projects.
Built to handle large projects, Amazon Q Developer works alongside you from idea to production code.

Get started free in your IDE

Top comments (0)

AWS Security LIVE!

Join us for AWS Security LIVE!

Discover the future of cloud security. Tune in live for trends, tips, and solutions from AWS and AWS Partners.

Learn More

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay