Reading Time: 1 minutes
Composite Design Pattern in Python
Write a Python program to implement Composite Design Pattern.
# We are attempting to make a Menu with sub-items, which may have subsequent sub-items, such as: # TopLevelMenu [Composite] # SubMenuItem1 [Composite] # SubMenuItem11 [Child] # SubMenuItem12 [Child] # SubMenuItem2 [Composite] class ChildElement: '''Class representing objects at the bottom of the hierarchy tree.''' def __init__(self, *args): ''''Takes the first positional argument and assigns to member variable "name".''' self.name = args[0] def printDetails(self): '''Prints the name of the child element.''' print("\t", end = "") print(self.name) class CompositeElement: '''Class representing objects at any level of the hierarchy tree except for the bottom level. Maintains the child objects by adding and removing them from the tree structure.''' def __init__(self, *args): '''Takes the first positional argument and assigns to member variable "name". Initializes a list of children elements.''' self.name = args[0] self.children = [] def appendChild(self, child): '''Adds the supplied child element to the list of children elements "children".''' self.children.append(child) def removeChild(self, child): '''Removes the supplied child element from the list of children elements "children".''' self.children.remove(child) def printDetails(self): '''Prints the details of the component element first. Then, iterates over each of its children, prints their details by calling their printDetails() method.''' print(self.name) for child in self.children: print("\t", end = "") child.printDetails() ### CREATING THE MENU i.e. TREE DATA STRUCTURE ### topLevelMenu = CompositeElement("TopLevelMenu") subMenuItem1 = CompositeElement("SubMenuItem1") subMenuItem2 = CompositeElement("SubMenuItem2") subMenuItem11 = ChildElement("SubMenuItem11") subMenuItem12 = ChildElement("SubMenuItem12") subMenuItem1.appendChild(subMenuItem11) subMenuItem1.appendChild(subMenuItem12) topLevelMenu.appendChild(subMenuItem1) topLevelMenu.appendChild(subMenuItem2) topLevelMenu.printDetails() ##OUTPUT: ##TopLevelMenu ## SubMenuItem1 ## SubMenuItem11 ## SubMenuItem12 ## SubMenuItem2