私はコーディングのインタビューの本を割れ有名なを読んでいると私は、この問題とOOD(オブジェクト指向設計)についての章では、今だ:カードの一般的なデッキを設計するシングルトンクラスですか?
は、カードの一般的なデッキのためのデータ構造を設計します。ブラックジャックを実装するためにデータ構造をどのようにサブクラス化するかを説明します。私はここで私がうまく理解していなかったコードをお見せしたい
:
public enum Suit {
Club (0),
Diamond (1),
Heart (2),
Spade (3);
private int value;
private Suit(int v) {
value = v;
}
public int getValue() {
return value;
}
public static Suit getSuitFromValue(int value) {
switch (value) {
case 0:
return Suit.Club;
case 1:
return Suit.Diamond;
case 2:
return Suit.Heart;
case 3:
return Suit.Spade;
default:
return null;
}
}
}
を私はデザインパターンを知っている発見していると私はコードでそれらを認識するためにいくつかの困難に会いました。しかし、この例のようなプライベートコンストラクタを見ると、絶対には、このクラスの一意のインスタンスを持つようにシングルトンパターンを実装したいという意味ですか?私が論理的に見つけたのは、あるデッキでは、それぞれのタイプ(ダイヤモンド、ハートなど)が1つしかないからです。
- 値のみがプライベートint型やプライベートではありません静的である理由:場合
ので、(コンストラクタがプライベートで別の例がある場合、私は知らない)、このクラスはシングルトンですint ??
- なぜそのクラスに "new"演算子がないのですか?私たちは少なくともそれを使うことができないようにスイートを設置すべきですか?だから、私たちは次のようなものを持っているはずです:新しいスーツを返します。もし、シングルトンクラスがスレッドセーフでないなら、それは大きな問題だと思いますか?(聞いてください= null)
- 私たちは同時に2つのスレッドへのアクセスを扱うために何かをしなければならないからです。確かなインスタンス化や、揮発性のキーワードによる二重チェックロックや、最初のインスタンス化のためだけに同期化されているようなもの...そうするための技術はたくさんありますが、何もしなければ、OODとパフォーマンス、いいえ?
あなたは
なぜシングルトンがカードのデッキに適していると思いますか?私は確かに世界にカードのデッキが2つ以上あると確信しています... –
あなたがもっと見ると、これは実際にenumでありクラスではありませんが、これはあなたのための謎の大部分を解決するはずです列挙型であり、それがシングルトンでないためにプライベートコンストラクタを持つことを意味します。同じ理由でコンストラクタが 'new'キーワードなしで呼び出され、値が異なる4つの異なる列挙型定数 – illgoforit