pythonでの設計モード_ファクトリモードとシングルモード

14102 ワード

工場モード
デザインモードはオブジェクト向け言語特有の内容で、私たちがある問題に直面したときに固定された方法で、デザインモードには多くの種類があり、比較的流行しているのはGOF(GoupOfFour)23種類のデザインモードです.ファクトリモードは作成者と呼び出し者の分離を実現し、専門のファクトリクラスを使用して実装クラスを選択し、オブジェクトを作成して統一的な管理と制御を行う.
#      

class CarFactory:
    def create_car(self,brand):
        if brand =="  ":
            return Benz()
        elif brand =="  ":
            return BMW()
        elif brand == "   ":
            return BYD()
        else:
            return "    ,    "

class Benz:
    pass

class BMW:
    pass

class BYD:
    pass

factory = CarFactory()
c1 = factory.create_car("  ")
c2 = factory.create_car("   ")
print(c1)

実行結果
<__main__.Benz object at 0x0000025E26D510F0>
<__main__.BYD object at 0x0000025E26D51198>

単一モード
SingletonPattern(SingletonPattern)の核心的な役割は、クラスが1つのインスタンスしかないことを保証し、そのインスタンスにアクセスするグローバルアクセスポイントを提供することです.
単一のインスタンス・モードでは、インスタンス・オブジェクトが1つしか生成されず、システム・リソースのオーバーヘッドが削減されます.コンフィギュレーション・ファイルの読み取り、その他の依存オブジェクトの生成など、オブジェクトの生成に多くのリソースが必要な場合、単一のオブジェクトを生成し、メモリに永続的に常駐させることで、オーバーヘッドを大幅に削減できます.
シングル・インスタンス・モードには様々な実装方法がありますが、ここでは書き換えを推奨します.new__()の方法.
#      

class MySingleton:

    __obj = None           #   
    __init_flag = True

    def __new__(cls, *args, **kwargs):
        if cls.__obj ==None:
            cls.__obj = object.__new__(cls)

        return cls.__obj

    def __init__(self,name):
        if MySingleton.__init_flag:
            print("init.....")
            self.name = name
            MySingleton.__init_flag = False

a = MySingleton("aa")
b = MySingleton("bb")
print(a)
print(b)
c = MySingleton("cc")
print(c)

実行結果
<__main__.MySingleton object at 0x000001C63B898EF0>
<__main__.MySingleton object at 0x000001C63B898EF0>
<__main__.MySingleton object at 0x000001C63B898EF0>

設計モードは「モード」と呼ばれ、いくつかの固定的な方法であり、前述した工場モードなど、他のシーンで簡単に使用できます.工場クラスを「単例」と定義するには、簡単なセットだけで実現できます.
#                

class CarFactory:
    __obj = None           #   
    __init_flag = True


    def create_car(self,brand):
        if brand =="  ":
            return Benz()
        elif brand =="  ":
            return BMW()
        elif brand == "   ":
            return BYD()
        else:
            return "    ,    "


    def __new__(cls, *args, **kwargs):
        if cls.__obj ==None:
            cls.__obj = object.__new__(cls)

        return cls.__obj

    def __init__(self):
        if CarFactory.__init_flag:
            print("init CarFactory....")
            CarFactory.__init_flag = False

class Benz:
    pass

class BMW:
    pass

class BYD:
    pass

factory = CarFactory()
c1 = factory.create_car("  ")
c2 = factory.create_car("   ")
print(c1)
print(c2)

factory2 = CarFactory()
print(factory)
print(factory2)

実行結果
<__main__.Benz object at 0x0000022DF3C01208>
<__main__.BYD object at 0x0000022DF3C01198>
<__main__.CarFactory object at 0x0000022DF3C010F0>
<__main__.CarFactory object at 0x0000022DF3C010F0>