- - PR -
singletonとクラス変数とインスタンス変数
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2006-11-01 16:10
お世話になっております。
今、悩みを抱えております。 その悩みとは オブジェクトがシングルトンパターンである場合 インスタンス変数とクラス変数は同義か否か です。 何かご存知な方いらっしゃいませんでしょうか。 | ||||
|
投稿日時: 2006-11-01 16:37
全く別物ですよ。
シングルトンの非staticフィールドは staticフィールドの代わりにはなりません。 それぞれ目的も違いますし、 フィールドに格納されるインスタンスがたまたま クラスのデザイン上1つしか存在しないというだけです。 | ||||
|
投稿日時: 2006-11-01 16:58
やはり
たまたま1つになる シングルトンのインスタンス変数 ではなく シングルトンであろうと唯一の変数としたい場合は きっちりクラス変数にするべきですよね。 ↑これ私の主張なのですが 「どうせひとつになるならいいじゃない」 という意見を押し通すには力不足でして。 | ||||
|
投稿日時: 2006-11-01 18:51
うーん、難しいところですが、
それはクラスの設計によると思います。 フィールドがstaticになるか非staticになるかのは、 「唯一」という判断基準では決めれません。 モデリングという観点で、インスタンスの属性なのか、 クラスの属性なのかを基準とすべきでしょう。 | ||||
|
投稿日時: 2006-11-01 20:34
例えばクラスを完全なシングルトンから スレッドローカルなシングルトンに設計変更する場合、 クラス変数にあるべきものがインスタンス変数にあったら, 多少面倒なことになりそうです。 という理由ではだめでしょうか? [ メッセージ編集済み 編集者: DSCH 編集日時 2006-11-01 20:36 ] | ||||
|
投稿日時: 2006-11-01 23:58
Singletonパターンはインスタンス数の制御に本質があるわけで、インスタンス数が一つとは限りません。
そのため、インスタンス変数とクラス変数は当然別物です。
| ||||
|
投稿日時: 2006-11-02 09:12
なんだかTypesafeEnumを髣髴とさせるソースですね。
staticなメソッドは拡張性に乏しいところがありますね。 各種インターフェースをimplementsすることが出来ませんから それだけでも拡張にたいするリスクが高いと思います。 | ||||
|
投稿日時: 2006-11-02 09:42
ぽん様がそのサンプルコードで何を言いたいのかがまったく分りませんが
とりあえず 唯一だ という観点ではなく インスタンス変数とクラス変数の役割の違いなんかを しつこく説明しました。 結局相手は「どうせ唯一なんだからいいじゃない」という意見でしたが (直したくないから、が正直なところだと思いますが) 一応、間違っているということは理解してもらえたらしく 「後輩の教育に悪い」という言葉をちらつかせたら納得して直してもらえました。 「後輩の教育に悪い」 これ結構使える言葉かもしれません。 |