Solutions
Points
from abc import ABCMeta, abstractmethod
class Computer():
_name = 'PC'
def __init__(self, name):
self._name = name
def display(self):
print(f'{self._name:>20}\n----------------------------------')
print(f"{'Case':>15}: {self.case}")
print(f"{'Mainboard':>15}: {self.mainboard}")
print(f"{'CPU':>15}: {self.cpu}")
print(f"{'Memory':>15}: {self.memory}")
print(f"{'Hard Drive':>15}: {self.hard_drive}")
print(f"{'Video Card':>15}: {self.video_card}\n")
class IComputerBuilder(metaclass=ABCMeta):
def new_computer(self):
self._computer = Computer(self._name)
def get_computer(self):
return self._computer
@abstractmethod
def build_mainboard(self):
pass
@abstractmethod
def get_case(self):
pass
@abstractmethod
def install_mainboard(self):
pass
@abstractmethod
def install_hard_drive(self):
pass
@abstractmethod
def install_video_card(self):
pass
class GamingPCBuilder(IComputerBuilder):
_name = 'Gaming PC'
def get_case(self):
self._computer.case = 'Coolermaster N300'
def build_mainboard(self):
self._computer.mainboard = 'MSI 970'
self._computer.cpu = 'Intel Core i7840k'
self._computer.memory = 'Corsair Vengeance 16GB'
def install_mainboard(self):
pass
def install_hard_drive(self):
self._computer.hard_drive = 'Seagate 2TB'
def install_video_card(self):
self._computer.video_card = 'GeForce GTX 1080 Ti'
class GenericPCBuilder(IComputerBuilder):
_name = 'Generic PC'
def get_case(self):
self._computer.case = 'IN WIN BP655'
def build_mainboard(self):
self._computer.mainboard = 'ASRock AMIH-ITX'
self._computer.cpu = 'AMD Athlon 5150'
self._computer.memory = 'Kingston ValueRAM 4GB'
def install_mainboard(self):
pass
def install_hard_drive(self):
self._computer.hard_drive = 'WD Blue 1TB'
def install_video_card(self):
self._computer.video_card = 'On Board'
class ComputerBuilder():
def __init__(self, builder):
self._builder = builder
def build_computer(self):
self._builder.new_computer()
self._builder.get_case()
self._builder.build_mainboard()
self._builder.install_mainboard()
self._builder.install_hard_drive()
self._builder.install_video_card()
def get_computer(self):
return self._builder.get_computer()
computer_builder = ComputerBuilder(GamingPCBuilder())
computer_builder.build_computer()
computer = computer_builder.get_computer()
computer.display()
computer_builder = ComputerBuilder(GenericPCBuilder())
computer_builder.build_computer()
computer = computer_builder.get_computer()
computer.display()
Gaming PC ---------------------------------- Case: Coolermaster N300 Mainboard: MSI 970 CPU: Intel Core i7840k Memory: Corsair Vengeance 16GB Hard Drive: Seagate 2TB Video Card: GeForce GTX 1080 Ti Generic PC ---------------------------------- Case: IN WIN BP655 Mainboard: ASRock AMIH-ITX CPU: AMD Athlon 5150 Memory: Kingston ValueRAM 4GB Hard Drive: WD Blue 1TB Video Card: On Board