web-dev-qa-db-ja.com

JavaBeansパターンを使用してオブジェクトを構築するときに、オブジェクトをどのようにフリーズしますか?

Joshua Blochは、Effective Javaを使用して、オブジェクトが構築の途中で一貫性のない状態になる可能性があることを述べています。JavaBeansパターンでは、クラスを不変にすることはできません。私はこれだけ理解しました。

また、構築が完了したオブジェクトを「凍結」し、凍結するまで使用できないようにすることで、これらの欠点を減らすことができるとも述べています。

誰かがオブジェクトを「凍結」することの意味を理解するのを手伝ってくれませんか?

4
Karan Khanna

事実上、「凍結」とは、多くの例外をスローすることを意味します。

  1. オブジェクトが構築されている間、(ゲッターまたはメソッドを介して)オブジェクトから読み取ろうとすると、何らかの「構築中」の例外がスローされます。
  2. 構築されて「凍結」されると、状態を変更する可能性のあるセッターまたはメソッドの呼び出しは、「凍結された」例外になります。

これはごちゃごちゃしたパターンで、広く使われているとは思いません。はるかにきれいなパターンはビルダーパターンです。そこには、変更可能で段階的に構築できる1つのオブジェクト(ビルダー)があるという考えがあります。完了すると、不変のオブジェクトが生成され、その後の操作で使用されます。

パターンがおなじみのように聞こえる場合は、これがStringBuilderクラスの機能とまったく同じであるためです(したがって、名前です)。

5
David Arno