- PR -

singletonとクラス変数とインスタンス変数

投稿者投稿内容
あすか
ぬし
会議室デビュー日: 2006/07/12
投稿数: 309
投稿日時: 2006-11-01 16:10
お世話になっております。

今、悩みを抱えております。
その悩みとは

オブジェクトがシングルトンパターンである場合
インスタンス変数とクラス変数は同義か否か

です。

何かご存知な方いらっしゃいませんでしょうか。
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2006-11-01 16:37
全く別物ですよ。

シングルトンの非staticフィールドは
staticフィールドの代わりにはなりません。

それぞれ目的も違いますし、
フィールドに格納されるインスタンスがたまたま
クラスのデザイン上1つしか存在しないというだけです。
あすか
ぬし
会議室デビュー日: 2006/07/12
投稿数: 309
投稿日時: 2006-11-01 16:58
やはり
たまたま1つになる
シングルトンのインスタンス変数
ではなく
シングルトンであろうと唯一の変数としたい場合は
きっちりクラス変数にするべきですよね。

↑これ私の主張なのですが
「どうせひとつになるならいいじゃない」
という意見を押し通すには力不足でして。
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2006-11-01 18:51
うーん、難しいところですが、
それはクラスの設計によると思います。

フィールドがstaticになるか非staticになるかのは、
「唯一」という判断基準では決めれません。
モデリングという観点で、インスタンスの属性なのか、
クラスの属性なのかを基準とすべきでしょう。
DSCH
常連さん
会議室デビュー日: 2005/10/23
投稿数: 24
投稿日時: 2006-11-01 20:34
引用:

あすかさんの書き込み (2006-11-01 16:58) より:
やはり
たまたま1つになる
シングルトンのインスタンス変数
ではなく
シングルトンであろうと唯一の変数としたい場合は
きっちりクラス変数にするべきですよね。

↑これ私の主張なのですが
「どうせひとつになるならいいじゃない」
という意見を押し通すには力不足でして。



例えばクラスを完全なシングルトンから
スレッドローカルなシングルトンに設計変更する場合、
クラス変数にあるべきものがインスタンス変数にあったら,
多少面倒なことになりそうです。
という理由ではだめでしょうか?



[ メッセージ編集済み 編集者: DSCH 編集日時 2006-11-01 20:36 ]
ぽん
大ベテラン
会議室デビュー日: 2003/05/13
投稿数: 157
投稿日時: 2006-11-01 23:58
Singletonパターンはインスタンス数の制御に本質があるわけで、インスタンス数が一つとは限りません。
そのため、インスタンス変数とクラス変数は当然別物です。
コード:
※例
public class コイン {
    private static final コイン 表 = new コイン(true);
    private static final コイン 裏 = new コイン(false);
    private static final Random RANDOM =new Random();
    private final boolean 面;
    
    private コイン(final boolean 面) {
        this.面 = 面;
    }
    
    public static コイン get() {
        return RANDOM.nextBoolean() ? 表:裏;
    }
    
    public boolean is表() {
        return 面;
    }
    
    public boolean is裏() {
        return !面;
    }
}

nagise
ぬし
会議室デビュー日: 2006/05/19
投稿数: 1141
投稿日時: 2006-11-02 09:12
なんだかTypesafeEnumを髣髴とさせるソースですね。

staticなメソッドは拡張性に乏しいところがありますね。
各種インターフェースをimplementsすることが出来ませんから
それだけでも拡張にたいするリスクが高いと思います。
あすか
ぬし
会議室デビュー日: 2006/07/12
投稿数: 309
投稿日時: 2006-11-02 09:42
ぽん様がそのサンプルコードで何を言いたいのかがまったく分りませんが


とりあえず

唯一だ
という観点ではなく
インスタンス変数とクラス変数の役割の違いなんかを
しつこく説明しました。
結局相手は「どうせ唯一なんだからいいじゃない」という意見でしたが
(直したくないから、が正直なところだと思いますが)
一応、間違っているということは理解してもらえたらしく
「後輩の教育に悪い」という言葉をちらつかせたら納得して直してもらえました。

「後輩の教育に悪い」
これ結構使える言葉かもしれません。

スキルアップ/キャリアアップ(JOB@IT)