DEV Community

Michel Moreira
Michel Moreira

Posted on

Padrão Facade em Python

O Facade é um padrão de projeto estrutural, a sua tradução significa fachada e é exatamente isso que se propõe a fazer. Este padrão consiste em fornecer uma interface simplificada para um conjunto complexo de classes.

Exemplo de código em Python

class Facade:
    def __init__(self, subsystem1: Subsystem1, subsystem2: Subsystem2) -> None:

        self._subsystem1 = subsystem1 or Subsystem1()
        self._subsystem2 = subsystem2 or Subsystem2()

    def operation(self) -> str:

        results = []
        results.append("Facade initializes subsystems:")
        results.append(self._subsystem1.operation1())
        results.append(self._subsystem2.operation1())
        results.append("Facade orders subsystems to perform the action:")
        results.append(self._subsystem1.operation_n())
        results.append(self._subsystem2.operation_z())
        return "\n".join(results)
Enter fullscreen mode Exit fullscreen mode

A classe Facade fornecerá uma interface simples para um subsistema que contém muitas partes que trabalham entre si. Esta possuirá as funcionalidades essenciais que o sistema necessita para funcionar sem que seja necessário acessar as funções dentro das classes do subsistema, diminuindo com sucesso a acoplação entre elas.

class Subsystem1:
    def operation1(self) -> str:
        return "Subsystem1: Ready!"

    # ...

    def operation_n(self) -> str:
        return "Subsystem1: Go!"


class Subsystem2:

    def operation1(self) -> str:
        return "Subsystem2: Get ready!"

    # ...

    def operation_z(self) -> str:
        return "Subsystem2: Fire!"


def client_code(facade: Facade) -> None:

    print(facade.operation(), end="")

Enter fullscreen mode Exit fullscreen mode

As classes Subsystem1 e Subsystem2 são exemplos de subsistemas que terão suas funcionalidades implementadas pela interface. A classe client_code mostra como o cliente não precisará conhecer nada sobre os subsistemas para utilizá-los.

A implementação em Python não tem nenhuma particularidade em relação a implementação em Java.


Referências
Padrões de Projeto (Diogo Moreira, 2020)
Mergulho nos Padrões de Projeto - v2020-1.14 (Alexander Shvets, 2020)
Os códigos usados como exemplo foram retirados do livro Mergulho nos Padrões de Projeto.

Top comments (0)