DEV Community

Juarez Júnior
Juarez Júnior

Posted on

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

Top comments (0)