[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[jfriends-ml 10173] String クラスは flyweight ?
小滝 です。
02/06/01 の古橋 さんのメールの中で下のような記述があります:
> StringクラスはJavaの言語仕様のなかでも特殊でFlyweightというパターン
> を利用しています。
しかしこれは多少省略しすぎのように思います。結城 氏 のデザインパターン
のテキスト p.308 で Flyweightパターンの要約として:
”インスタンスを出来るだけ共有させて無駄に new しない”
とあります。しかしこれはFlyweight の一面を言っているに過ぎません。
Gamma の原著では上記(と同様)の記述に引き続き下のような記述があ
ります:
”ここで重要な概念(key concept)はintrinsic状態と extrinsic状態の
区別である。intrinsic状態はflyweightの中に保存されflyweightの
コンテキスト(実行環境)とは独立であり全てのオブジェクトにおいて
共有される。これに対してextrinsic状態はコンテキストに依存しオブ
ジェクト間で(一般に)共有することは出来ない。”
従って Flyweight パターン(を持つ)クラスとはデータ構造としての
2面性、つまりintrinsic状態(不変部分)と extrinsic状態(可変部分)
を持つもの(あるいはその振舞いが影響を受けるもの)、として定義され
ています。
ということで、String クラスを Flyweightパターン(を持つクラス)と言う
のは多少省略し過ぎのように考えますがいかがでしょうか?
-------------------------------------------------------------------
それから以下は蛇足ですが・・・。
equals() と == をどのように使い分けるかということが議論されています。
議論の焦点は 処理速度 と 判定結果不定 のトレードオフをどのように
考えるかということのようです。
しかし実用的には下のようなコーディングスタイルで充分だと思いますが。
if(A == B || A.equals(B)) {
........
} else {
}