用于把一组相似的对象当成一个对象来使用

使用场景

  1. ceo > manager > employee
  2. 文件夹与文件,属性菜单

Demo

  1. """
  2. 组合模式
  3. """
  4. class Employee:
  5. def __init__(self, name, age):
  6. self.name = name
  7. self.age = age
  8. self.subordinates = []
  9. def add(self, e):
  10. self.subordinates.append(e)
  11. def remove(self, e):
  12. self.subordinates.remove(e)
  13. def display(self):
  14. for subordinate in self.subordinates:
  15. print(f'my name is {subordinate.name}, age is {subordinate.age}')
  16. if subordinate.subordinates:
  17. subordinate.display()
  18. if __name__ == '__main__':
  19. ceo = Employee('ceo', 22)
  20. m1 = Employee('m1', 20)
  21. m2 = Employee('m2', 23)
  22. ceo.add(m1)
  23. ceo.add(m2)
  24. e1 = Employee('e1', 18)
  25. m1.add(e1)
  26. ceo.display()