Example of "Builder" desnig pattern in Python
- """
- Separate the construction of a complex object from its representation so
- that the same construction process can create different representations.
- """
- import abc
- class Director:
- """
- Construct an object using the Builder interface.
- """
- def __init__(self):
- self._builder = None
- def construct(self, builder):
- self._builder = builder
- self._builder._build_part_a()
- self._builder._build_part_b()
- self._builder._build_part_c()
- class Builder(metaclass=abc.ABCMeta):
- """
- Specify an abstract interface for creating parts of a Product
- object.
- """
- def __init__(self):
- self.product = Product()
- @abc.abstractmethod
- def _build_part_a(self):
- pass
- @abc.abstractmethod
- def _build_part_b(self):
- pass
- @abc.abstractmethod
- def _build_part_c(self):
- pass
- class ConcreteBuilder(Builder):
- """
- Construct and assemble parts of the product by implementing the
- Builder interface.
- Define and keep track of the representation it creates.
- Provide an interface for retrieving the product.
- """
- def _build_part_a(self):
- pass
- def _build_part_b(self):
- pass
- def _build_part_c(self):
- pass
- class Product:
- """
- Represent the complex object under construction.
- """
- pass
- def main():
- concrete_builder = ConcreteBuilder()
- director = Director()
- director.construct(concrete_builder)
- product = concrete_builder.product
- if __name__ == "__main__":
- main()