ブログトップ 記事一覧 ログイン 無料ブログ開設

Strategic Choice

2009-04-04

[][]Immutable

Immutable [Grand98]

概要

オブジェクトが生成されたあと、オブジェクトの変更を禁止する。

適用可能性

  • インスタンスが自身の状態を変える必要はなく、複数の他のオブジェクトによって使われる。
  • インスタンスが複数のスレッドからアクセスされる。
  • インスタンスの状態管理をシンプルにしたい。
    • この点は並行プログラミングに限った話ではない。
  • スレッドを同期させるオーバヘッドを避けたい。

  • 複数の他のオブジェクトによって使われるオブジェクトにおいて、
  • 状態情報の変更の伝達と同期を管理しなければならないことを避けるために、
  • それらが生成されたあとはそれらの状態のどんな変更も承認しない不変の共有オブジェクトを生成する。

f:id:asakichy:20090331220541j:image

  • コンストラクタで属性を設定。
  • getterのみでsetterはない。

結果

  • 同じオブジェクトへの参照を共有するオブジェクトを堅牢にする。
  • オブジェクトを共有する複数の実行スレッドを同期させる必要性を省くことができる。

関連

  • Single Threaded Execution
    • 共有オブジェクトに複数のスレッドが同調してアクセスするのに最も使われるパターンである。
    • Immutableパターンを使えば、このパターンや他のいかなる種類の同調アクセスも使わずに済む。