55 lines
1.6 KiB
Python
55 lines
1.6 KiB
Python
class Component:
|
|
"""Абстрактный класс для всех компонентов."""
|
|
def operation(self):
|
|
raise NotImplementedError("Метод operation должен быть переопределен.")
|
|
|
|
|
|
class Leaf(Component):
|
|
"""Листовой элемент, который не имеет подкомпонентов."""
|
|
def __init__(self, name):
|
|
self.name = name
|
|
|
|
def operation(self):
|
|
return f"Leaf: {self.name}"
|
|
|
|
|
|
class Composite(Component):
|
|
"""Композитный элемент, который может содержать другие компоненты."""
|
|
def __init__(self, name):
|
|
self.name = name
|
|
self.children = []
|
|
|
|
def add(self, component):
|
|
self.children.append(component)
|
|
|
|
def remove(self, component):
|
|
self.children.remove(component)
|
|
|
|
def operation(self):
|
|
results = [f"Composite: {self.name}"]
|
|
for child in self.children:
|
|
results.append(child.operation())
|
|
return "\n".join(results)
|
|
|
|
|
|
# Пример использования
|
|
if __name__ == "__main__":
|
|
# Создаем листья
|
|
leaf1 = Leaf("Leaf 1")
|
|
leaf2 = Leaf("Leaf 2")
|
|
leaf3 = Leaf("Leaf 3")
|
|
|
|
# Создаем композиты
|
|
composite1 = Composite("Composite 1")
|
|
composite2 = Composite("Composite 2")
|
|
|
|
# Добавляем листья в композиты
|
|
composite1.add(leaf1)
|
|
composite1.add(leaf2)
|
|
|
|
composite2.add(leaf3)
|
|
composite2.add(composite1) # Вложение composite1 в composite2
|
|
|
|
# Выполняем операции
|
|
print(composite2.operation())
|