DEV Community

Michel Moreira
Michel Moreira

Posted on

Padrão Decorator em Python

O Decorator é um padrão de projeto estrutural, este permite a adição de novos comportamentos para objetos, basicamente decorando (ou enfeitando) um objeto mais simples, usando agregação ou composição.

Exemplo de código em Python

class Component():
    def operation(self) -> str:
        pass


class ConcreteComponent(Component):
    def operation(self) -> str:
        return "ConcreteComponent"


class Decorator(Component):
    _component: Component = None

    def __init__(self, component: Component) -> None:
        self._component = component

    @property
    def component(self) -> str:

        return self._component

    def operation(self) -> str:
        return self._component.operation()

class ConcreteDecoratorA(Decorator):

    def operation(self) -> str:
        return f"ConcreteDecoratorA({self.component.operation()})"
Enter fullscreen mode Exit fullscreen mode

A classe Component representa a interface que será seguida pelos componentes concretos(ConcreteComponent), poderão existir inúmeros componentes concretos diferentes.

A classe Decorator segue a mesma interface dos outros componentes, o seu principal propósito é definir a interface que irá "cobrir" todos os componentes concretos. Esta classe delega todo o trabalho para os componentes cobertos por ela.

A classe ConcreteDecoratorA chama os objetos cobertos e altera seus resultados de alguma maneira.

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)