Immutableパターン

Vector3D, Vector4D, Matrix4D なるクラスを作っているのだけれど、
例えば、mul()は自分自身を変えるのか、自分自身は変わらずに新しいインスタンスを返すのか、実装に迷う。
そこで、StringとStringBufferや、ImageとBufferedImageにならい、これらのクラスを
すべて、Immutableにしてみた。つまり、フィールドをすべて、finalにして、
コンストラクタで一度値を設定したら2度と変更できないのだ。
これは、StringもImageも同じ。
addやsubなどは自分自身を変える方も有益なので躊躇していたのだが、いざやってみると悪くない。
Immutableというキツいルールのおかげで不必要に悩まずに使うことができる。