ボーグパターンがシングルトンパターンよりも優れているのはなぜですか?
私はそれらが何か違う結果をもたらすのを見ないので尋ねます。
ボーグ:
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オブジェクトがそれ自体を更新する必要があるかどうかを確認するために、その内部状態を照会する必要があるのは厄介だと思います。
内部状態が多いほど悪化します。たとえば、オブジェクトがそのレジスタをディスクに保存するためにアプリケーションのティアダウン信号をリッスンする必要がある場合、その登録も1回だけ実行する必要があり、これはシングルトンを使用すると簡単になります。