[解決済み] PythonでBorgパターンがSingletonパターンより優れている理由
疑問点
なぜ ボーグパターン よりも良いのは シングルトンパターン ?
私は、それらが何か異なる結果をもたらすとは思えないので、私は尋ねます。
ボーグです。
class Borg:
__shared_state = {}
# init internal state variables here
__register = {}
def __init__(self):
self.__dict__ = self.__shared_state
if not self.__register:
self._init_default_register()
シングルトンです。
class Singleton:
def __init__(self):
# init internal state variables here
self.__register = {}
self._init_default_register()
# singleton mechanics external to class, for example this in the module
Singleton = Singleton()
ここで表示したいのは、サービスオブジェクトはBorgとして実装されているかSingletonとして実装されているかに関わらず、自明ではない内部状態を持つ(それに基づいて何らかのサービスを提供する)ことです(つまり、何か役に立つものでなければならず、単なる遊びのSingleton/Borgではないのです)。
そして、この状態は開始されなければなりません。ここでは、シングルトンの実装はより簡単です。 init をグローバルステートのセットアップとして扱うので、シングルトンの実装はより簡単です。私は、Borgオブジェクトが自分自身を更新すべきかどうかを確認するために、その内部の状態を照会する必要があることを厄介だと感じています。
内部状態が多くなればなるほど、状況は悪化します。たとえば、オブジェクトがそのレジスタをディスクに保存するためにアプリケーションのティアダウンシグナルを聞く必要がある場合、その登録も同様に一度だけ行われるべきで、これはシングルトンでより簡単になっています。
どのように解決するのですか?
borgが異なる本当の理由は、サブクラス化にあります。
borgをサブクラス化すると、そのサブクラスのオブジェクトは、そのサブクラスで共有状態を明示的にオーバーライドしない限り、親クラスのオブジェクトと同じ状態を持ちます。シングルトン パターンの各サブクラスは独自の状態を持つので、異なるオブジェクトが生成されます。
また、シングルトンパターンでは、オブジェクトは実際には同じであり、状態だけではありません(状態が本当に重要な唯一のものであるにもかかわらず)。
関連
-
[解決済み] Pythonで現在時刻を取得する方法
-
[解決済み] Python 3で「1000000000000000 in range(1000000000000001)」はなぜ速いのですか?
-
[解決済み] なぜC++はPythonよりもstdinからの行の読み込みが遅いのですか?
-
[解決済み] 静的クラスとシングルトンパターンの違い?
-
[解決済み] Pythonのクラスはなぜオブジェクトを継承するのですか?
-
[解決済み] Pythonでシングルトンを作成する
-
[解決済み】なぜPythonはこのJSONデータをパースできないのですか?[終了] PythonがこのJSONデータをパースできないのはなぜですか?
-
[解決済み】C++ シングルトンデザインパターン
-
[解決済み] Python 2.7サポート終了?
-
[解決済み] スペースがないテキストを単語のリストに分割する方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Pythonで静的なクラス変数は可能ですか?
-
[解決済み] シングルトンを定義するシンプルでエレガントな方法はありますか?重複
-
[解決済み] Pandasのデータフレームでタプルの列を分割するにはどうしたらいいですか?
-
[解決済み] Pythonのマルチプロセッシングプールimap_unorderedの呼び出しの進捗を表示しますか?
-
[解決済み] Pythonの構文に新しいステートメントを追加することはできますか?
-
[解決済み] DataFrameに日付間の日数カラムを追加する pandas
-
[解決済み] PyMongoで.sortを使用する
-
[解決済み] あるオブジェクトが数であるかどうかを確認する、最もパイソン的な方法は何でしょうか?
-
[解決済み] djangoフレームワークでフォームフィールドから値を取得するには?
-
[解決済み] あるメソッドが複数の引数のうち1つの引数で呼び出されたことを保証する