PROTOTYPE DESIGN:PYTHON


プロトタイプ設計モードは、オブジェクトの概念が最初から作成された新しいオブジェクトの概念とは異なるクラス作成インスタンスの複雑さを隠すのに役立ちます.必要に応じて、新しくコピーしたオブジェクトがプロパティに変更される場合があります.この方法は製品の開発時間と資源を節約する.
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):

    def __init__(self, number):
        self._type = "TYPE2"
        self._value = number

    def clone(self):
        return copy.copy(self)


class ObjectFactory:

    __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("{0}: {1}".format(instance.getType(), instance.getValue()))

    instance = ObjectFactory.getType1Value2()
    print("{0}: {1}".format(instance.getType(), instance.getValue()))

    instance = ObjectFactory.getType2Value1()
    print("{0}: {1}".format(instance.getType(), instance.getValue()))

    instance = ObjectFactory.getType2Value2()
    print("{0}: {1}".format(instance.getType(), instance.getValue()))


if __name__ == "__main__":
    main()