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.