Python - プログラミングおよびコード例における [ファクトリー モード] と [シングルトン モード] の違いは何ですか

1. コンセプト

ファクトリ パターンとシングルトン パターンはどちらも、オブジェクト指向プログラミングで一般的に使用される設計パターンです。

  1. 工厂模式(FactoryPattern):これは、オブジェクトの作成ロジックを公開せずにオブジェクトを作成する方法を提供する作成パターンです。このパターンは、ファクトリ クラスを定義し、ファクトリ メソッドを使用してオブジェクトを作成します。ファクトリ パターンは、オブジェクト作成プロセスを別個のファクトリ クラスに分離して、分離を実現し、システムの結合を軽減し、システムのスケーラビリティと保守性を向上させることができます。ファクトリ パターンには、単純なファクトリ パターン、ファクトリ メソッド パターン、および抽象ファクトリ パターンが含まれます。
  2. 单例模式(Singleton Pattern):これは、クラスにインスタンスが 1 つだけ存在することを保証し、外部の世界がこのインスタンスにアクセスできるようにグローバル アクセス ポイントを提供する作成パターンです。シングルトン パターンを使用すると、システム内で重複オブジェクトが多すぎるのを回避できるため、システムのパフォーマンスと効率が向上します。クラスのインスタンスが 1 つだけ存在するようにすることで、オブジェクトの共有とオブジェクトの作成の制御が実現され、同時にシステムのパフォーマンスが向上します。

2. 違い

1. 目的の違い

ファクトリ パターンの主な目的は、オブジェクト作成プロセスを別のファクトリ クラスに分離して、デカップリングを実現し、システムの結合を軽減し、システムのスケーラビリティと保守性を向上させることですが、シングルトン パターンの主な目的は、クラスのインスタンスが 1 つだけ存在するようにすることで、オブジェクトの共有とオブジェクトの作成の制御が実現されます。

2.戻り値が異なる

ファクトリ パターンは通常、新しいオブジェクト インスタンスを返しますが、シングルトン パターンは同じインスタンスを返します。

3. さまざまな実装方法

ファクトリ パターンは通常、オブジェクトを作成するためのファクトリ クラスを定義し、さまざまなパラメータ値に従ってさまざまなオブジェクト インスタンスを作成できます。一方、シングルトン パターンでは、クラス内に静的メンバ オブジェクトを定義する必要があり、これはクラスの静的メソッドを呼び出すことで取得できます。 . このオブジェクトのインスタンス。

3. サンプルコード

ファクトリーパターンのサンプルコード

class Car:
    def __init__(self, brand):
        self.brand = brand

    def run(self):
        print(f'{
      
      self.brand} car is running')


class CarFactory:
    def create(self, brand):
        return Car(brand)


car_factory = CarFactory()
car1 = car_factory.create('BMW')
car1.run()
car2 = car_factory.create('Benz')
car2.run()
print(car1 is car2)

演算結果

ここに画像の説明を挿入します

上記の操作の結果を確認すると、インスタンス オブジェクトによって渡されるパラメーター出力は独立しており、オブジェクトも異なります。

シングルトンパターンのサンプルコード

class Singleton:
    __instance = None

    def __new__(cls):
        if not cls.__instance:
            cls.__instance = super().__new__(cls)
        return cls.__instance

    def __init__(self):
        self.at = False

    def set_at(self, a):
        if a:
            self.at = True
        else:
            self.at = False


if __name__ == '__main__':
    s1 = Singleton()
    s2 = Singleton()

    print('s1 is s2 --->', s1 == s2)  # True
    s1.set_at(0)
    print('set s1 at -->', s1.at)
    print('s2 at ------>', s2.at)
    s2.set_at(1)
    print('set s2 at -->', s2.at)
    print('=====================')
    print('s1 at -->', s1.at)
    print('s2 at -->', s2.at)

演算結果

ここに画像の説明を挿入します
上記の実行結果から、2 つの実際の列 s1 と s2 が作成後に同じオブジェクトを指していることがわかります。プロパティを設定するときは、最後のインスタンス設定の結果が優先されます。

4. まとめ

ファクトリ パターンとシングルトン パターンは、目的と実装方法が異なる 2 つの異なる設計パターンです。ファクトリ パターンは主にオブジェクトの作成に使用され、シングルトン パターンは主にオブジェクトの共有に使用されます。実際のアプリケーションでは、特定のニーズやシナリオに応じて選択できます。

おすすめ

転載: blog.csdn.net/qq_43030934/article/details/132454595