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()})"
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)