The Builder Design Pattern is a creational pattern used in software design to construct a complex object step by step. It allows the construction of a product in a step-by-step fashion, where the construction process can vary based on the type of product being built. The pattern separates the construction of a complex object from its representation, allowing the same construction process to create different representations.
The Product is the complex object that the Builder pattern is responsible for constructing.
class Computer:
cpu: str
ram: str
storage: str
def __init__(self) -> None:
self.cpu = ''
self.ram = ''
self.storage = ''
def set_cpu(self, cpu: str) -> None:
self.cpu = cpu
def set_ram(self, ram: str) -> None:
self.ram = ram
def set_storage(self, storage: str) -> None:
self.storage = storage
def display_info(self) -> None:
print("Computer configuration:")
print(f"CPU: {self.cpu}")
print(f"RAM: {self.ram}")
print(f"Storage: {self.storage}")
from abc import ABC, abstractmethod
class Builder(ABC):
@abstractmethod
def build_cpu(self):
pass
@abstractmethod
def build_ram(self):
pass
@abstractmethod
def build_storage(self):
pass
@abstractmethod
def get_result(self):
pass
from Builder import Builder
from Computer import Computer
class GamingComputerBuilder(Builder):
computer: Computer = Computer()
def build_cpu(self) -> None:
self.computer.set_cpu('Intel Core i9-9900K')
def build_ram(self) -> None:
self.computer.set_ram('Corsair Vengeance LPX 16GB')
def build_storage(self) -> None:
self.computer.set_storage('Seagate Barracuda 2TB')
def get_result(self) -> Computer:
return self.computer
from GamingComputerBuilder import GamingComputerBuilder
from Builder import Builder
class Director:
def construct(self, builder: Builder) -> None:
builder.build_cpu()
builder.build_ram()
builder.build_storage()
from GamingComputerBuilder import GamingComputerBuilder
from OfficeComputerBuilder import OfficeComputerBuilder
from Director import Director
from Builder import Builder
from Computer import Computer
def main() -> None:
gaming_computer_builder: Builder = GamingComputerBuilder()
director = Director()
director.construct(gaming_computer_builder)
gaming_computer: Computer = gaming_computer_builder.get_result()
gaming_computer.display_info()
office_computer_builder: Builder = OfficeComputerBuilder()
director.construct(office_computer_builder)
office_computer: Computer = office_computer_builder.get_result()
office_computer.display_info()
if __name__ == '__main__':
main()