Các mẫu thiết kế Python - Nguyên mẫu

Mẫu thiết kế nguyên mẫu giúp che giấu sự phức tạp của các thể hiện được tạo bởi lớp. Khái niệm về đối tượng hiện có sẽ khác với khái niệm của đối tượng mới, được tạo ra từ đầu.

Đối tượng mới được sao chép có thể có một số thay đổi trong các thuộc tính nếu được yêu cầu. Cách tiếp cận này tiết kiệm thời gian và nguồn lực dành cho việc phát triển sản phẩm.

Làm thế nào để thực hiện một mẫu nguyên mẫu?

Bây giờ chúng ta hãy xem cách triển khai một mẫu nguyên mẫu.

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()

Đầu ra

Chương trình trên sẽ tạo ra kết quả sau:

Đầu ra giúp tạo các đối tượng mới với các đối tượng hiện có và nó được hiển thị rõ ràng trong đầu ra được đề cập ở trên.