Prototype
A prototype is an object or partial object that you clone in order to create a new object. This is especially tricky in python where everything is a reference. This will require the use of copy.deepcopy(obj)
to clone the object so that any changes to the copied object won't be referenced by the original. A practical use for prototypes is to combine them with factories to create Prototype Factories. These store static example objects that can then be returned via static methods after providing only the significant arguments.
python
import copy
class Address:
def __init__(self, street_address, suite, city):
self.suite = suite
self.city = city
self.street_address = street_address
def __str__(self):
return f'{self.street_address}, Suite #{self.suite}, {self.city}'
class Employee:
def __init__(self, name, address):
self.address = address
self.name = name
def __str__(self):
return f'{self.name} works at {self.address}'
class EmployeeFactory:
main_office_employee = Employee("", Address("123 East Dr", 0, "London"))
aux_office_employee = Employee("", Address("123B East Dr", 0, "London"))
@staticmethod
def __new_employee(proto, name, suite):
result = copy.deepcopy(proto)
result.name = name
result.address.suite = suite
return result
@staticmethod
def new_main_office_employee(name, suite):
return EmployeeFactory.__new_employee(
EmployeeFactory.main_office_employee,
name, suite
)
@staticmethod
def new_aux_office_employee(name, suite):
return EmployeeFactory.__new_employee(
EmployeeFactory.aux_office_employee,
name, suite
)