2011-12-15 13 views
1

私はモデルを持っているとしましょう、このモデルはシングルトンなので、インスタンスは1つだけです。私はこのモデルを他のクラスに渡し、それを変数に保持します。オブジェクトへの参照の問題

その後、同じモデルを原点でモデルのシリアル化されたバージョンに置き換えます。このモデルの変数を保持する他のクラスは、古い参照権をまだ指していますか?

モデルを新しい参照で置き換えて、他のすべてのクラスをこの新しいクラスを指すようにするにはどうすればよいですか?

答えて

1

これらのオブジェクトのすべてがシングルトンへの参照を保持している場合は、新しいインスタンスを渡すメソッドを(再)呼び出して変数を再設定することによって、それらを手動で更新する必要があります。

よりスマートな方法は、シングルトンを参照しているシンプルなラッパーオブジェクトと、他のすべてのオブジェクトがアクセスする単純なラッパーオブジェクトを渡すことです。新しいシングルトンに更新する必要があるときは、ラッパーの参照を変更するだけで済みます。

典型的なシングルトンの実装では、シングルトンクラスの静的get()メソッドを公開して公開するだけで、シングルトンを訪問者のように渡すのではなく、このメソッドを呼び出すために他のクラスに任せます。

+0

申し訳ありませんが、今は明らかになりました。 –

0

通常、シングルトンのシリアライズとデシリアライズは非常に悪い考えです。オブジェクトのインスタンス数が増え、シングルトンとしての目的が果たされなくなる可能性があります。私はむしろ、私のシングルトンが保持しているものの主な内容を直列化し、オブジェクト全体ではなく直列化したいと思う。

このようにシリアル化する必要がある場合は、クラスを使用して登録されたすべてのクラスに通知する何らかのレジストリを利用する必要があります。

+0

モデルが変更されたことを誰にも警告するために、オブザーバのインターフェースを持っているような感じです。 –

+0

@Pat、一種ですが、ここで観測可能なのはシングルトンではありません(参照全体が変更されるため):-)レジストリなどのより静的な観測可能性が必要で、すべてのコンシューマが登録し、シリアル化プロセスが変更を通知します。 – aishwarya

関連する問題