Wzorce projektowe w Pythonie - prototyp
Wzorzec projektowy prototypu pomaga ukryć złożoność instancji utworzonych przez klasę. Koncepcja istniejącego obiektu będzie się różnić od koncepcji nowego obiektu, który jest tworzony od podstaw.
W razie potrzeby nowo skopiowany obiekt może mieć pewne zmiany we właściwościach. Takie podejście oszczędza czas i zasoby przeznaczone na rozwój produktu.
Jak zaimplementować prototypowy wzorzec?
Zobaczmy teraz, jak zaimplementować prototypowy wzorzec.
import copy
class Prototype:
   _type = None
   _value = None
   def clone(self):
      pass
   def getType(self):
      return self._type
   def getValue(self):
      return self._value
class Type1(Prototype):
   def __init__(self, number):
      self._type = "Type1"
      self._value = number
   def clone(self):
      return copy.copy(self)
class Type2(Prototype):
   """ Concrete prototype. """
   def __init__(self, number):
      self._type = "Type2"
      self._value = number
   def clone(self):
      return copy.copy(self)
class ObjectFactory:
   """ Manages prototypes.
   Static factory, that encapsulates prototype
   initialization and then allows instatiation
   of the classes from these prototypes.
   """
   __type1Value1 = None
   __type1Value2 = None
   __type2Value1 = None
   __type2Value2 = None
   @staticmethod
   def initialize():
      ObjectFactory.__type1Value1 = Type1(1)
      ObjectFactory.__type1Value2 = Type1(2)
      ObjectFactory.__type2Value1 = Type2(1)
      ObjectFactory.__type2Value2 = Type2(2)
   @staticmethod
   def getType1Value1():
      return ObjectFactory.__type1Value1.clone()
   @staticmethod
   def getType1Value2():
      return ObjectFactory.__type1Value2.clone()
   @staticmethod
   def getType2Value1():
      return ObjectFactory.__type2Value1.clone()
   @staticmethod
   def getType2Value2():
      return ObjectFactory.__type2Value2.clone()
def main():
   ObjectFactory.initialize()
   
   instance = ObjectFactory.getType1Value1()
   print "%s: %s" % (instance.getType(), instance.getValue())
   
   instance = ObjectFactory.getType1Value2()
   print "%s: %s" % (instance.getType(), instance.getValue())
   
   instance = ObjectFactory.getType2Value1()
   print "%s: %s" % (instance.getType(), instance.getValue())
   
   instance = ObjectFactory.getType2Value2()
   print "%s: %s" % (instance.getType(), instance.getValue())
if __name__ == "__main__":
   main()Wynik
Powyższy program wygeneruje następujące dane wyjściowe -
 
                Wynik pomaga w tworzeniu nowych obiektów z już istniejącymi i jest wyraźnie widoczny we wspomnianym powyżej wyjściu.