O Composite é um padrão de projeto estrutural, ele permite que objetos sejam compostos em estrutura de árvore, esta podendo ser tratada como se fossem objetos individuais.
Exemplo de código em Python
class Component(ABC):
@property
def parent(self) -> Component:
return self._parent
@parent.setter
def parent(self, parent: Component):
self._parent = parent
def add(self, component: Component) -> None:
pass
def remove(self, component: Component) -> None:
pass
def is_composite(self) -> bool:
return False
@abstractmethod
def operation(self) -> str:
pass
class Leaf(Component):
def operation(self) -> str:
return "Leaf"
class Composite(Component):
def __init__(self) -> None:
self._children: List[Component] = []
def add(self, component: Component) -> None:
self._children.append(component)
component.parent = self
def remove(self, component: Component) -> None:
self._children.remove(component)
component.parent = None
def is_composite(self) -> bool:
return True
def operation(self) -> str:
results = []
for child in self._children:
results.append(child.operation())
return f"Branch({'+'.join(results)})"
A classe Component descreve as operações que são comuns para todos os elementos. A classe Leaf é um elemento básico que constitui a árvore e não pode ter sub-elementos, desta maneira ficam encarregados do trabalho final uma vez que não tem para quem delegá-lo. A classe Composite é o objeto que vai ter sub-elementos (folhas ou outros composites).
Quando um pedido é feito ele é repassado pelos objetos Composite, processando resultados intermediário, até concluir a requisição e retornar o resultado final.
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)