1

Singletonコーディングでは、クラスのインスタンス化を 1 つのオブジェクトのみに制限すると呼ばれるパターンが存在します。しかし、モジュールレベルで一度だけクラスをインスタンス化でき、例えばアンダースコアで名前を付けてそれを使用できる場合、Singleton を使用する理由は何ですか? シングルトンを使用する理由と時期

具体的に言うと(私にとって本当に満足のいく答えはないので)、具体的な例を次に示します。標準の python クラスを指定し、インスタンスを作成します。

class MyObject(object):
    ....

_myinstance = MyObject()

この実装が 2 番目のインスタンスの作成を妨げないという事実に加えて、シングルトンの使用がこの単純な実装より優れているのはどのような状況ですか?

4

5 に答える 5

1

Singleton パターンは、リソースを作成するために高価なものを再利用したい場合に役立ちます。作成はアプリケーションの存続期間全体で 1 回だけ実行されるため、料金を支払うのは 1 回だけです。

于 2012-12-10T06:42:50.747 に答える
1

シングルトン パターンは、占有メモリや作成にかかる時間の点でリソースが高価な場合に役立ちます。シングルトン パターンに見られるもう 1 つの使用法は、アプリケーションの要件に基づいてクラスのインスタンス数を制限できることです。1 つの例として、スレッドごとに常に 1 つの接続を確立するデータベースへの接続が考えられます。 、その接続は通常、スレッドとともに有効です。

于 2012-12-10T06:50:38.740 に答える
0

シングルトンは本質的に、一部のエンティティが単一のインスタンスのみを持つ必要があることを示す概念です。単一インスタンスの理由はさまざまですが、主なものは次のとおりです。

  • 異なるモジュールで共有可能なリソースを再利用します。
  • リソースの複数のインスタンスを禁止します。
  • using モジュールがまだ準備できていないときにインスタンスを作成します。たとえば、プログラム コードが実行される前に作成および初期化されるグローバル変数などです。
于 2012-12-10T06:50:57.647 に答える
0

ここにいる人々は、Singleton を使用したい理由を強調する点で既に良い仕事をしているので、おそらくそれを使用すべきではない理由があることを強調したいと思います。このトピックについて最近見つけた良いブログ投稿: http://misko.hevery.com/2008/08/21/where-have-all-the-singletons-gone/

于 2012-12-11T08:51:20.823 に答える
0

シングルトンを使用する理由は、代替手段が何であるかによって異なります。

クライアント コードのある時点で明示的に作成されたオブジェクトと比較して、シングルトンは複数のクラス、パッケージ、モジュールなどから簡単にアクセスできます。これには利点がありますが、過度に緊密に結合されたコードの作成を助長する可能性があります。明示的なアプローチは、依存関係をより明確にしますが、特に既存のコードを基に構築する場合、実装が難しい場合があります。

私が実際によく目にするシングルトンの代替は、実際には準グローバル変数のコレクションである「クラス」です。これと比較して、シングルトン (または任意のオブジェクト) は、コードのさまざまな部分間の結合を制限し、他のクラスをテストするときにテストしたり、スタブまたはモックに置き換えたりするのが簡単であるため、大幅に改善されています。また、後でコードを変更して複数のインスタンスを許可するのがはるかに簡単になります。多くの場合、インスタンスが 1 つだけである必要があるという要件は実際にはそれほど強くなく、この柔軟性は役立ちます。

多数のグローバル変数を使用する既存のコードをリファクタリングする場合、シングルトンは達成可能な最初のステップとなり、必要に応じて明示的に作成されたオブジェクトにさらにリファクタリングでき、追加の労力を費やす価値があります。

于 2012-12-10T11:18:41.883 に答える