2012-03-05 11 views
0

は、この質問はかなりfundamental.Iは私のcygwinの上、シンプルでstraighfowardテストを与えていますシングルトンはコンストラクタをプライベートなものにしているのに対し、典型的な方法は逆です。私の最近のインターンシップの経験では、ほとんどのコーダがこのようにAPIを実装していることに気付きました。シングルトンと古典的なコンストラクタ

両方のクラス構築アプローチが並行して存在する場合、それが当てはまるか不必要なのか疑問です。

UPDATE

がこの範囲にシングルトンものcuzを実質的にナンセンス一つのプログラムでは、既存のコンストラクタ&シングルトンがunhazardousゴミのような役に立たないコードになるでしょうか?

概要 これは非常にナンセンスの質問... で、より多くの何、あなたのすべてのブリリアントのおかげで コンストラクタとシングルトンデザインパターンは、「相互に排他的」であり、vulnerbilityの面で、それはありますグローバル変数と同じ話は私たちのデバッグ時間を殺す...

+1

A「シングルトン」オブジェクト(この例のように)兄弟を持つことができます

多くの開発者は、多くのグローバル変数のような悪いことするシングルトンを考えます欠点。 – MSalters

答えて

2

Exampleのコンストラクタをpublicにすると、クラスのユーザーがインスタンスを直接作成できるようになります。設計でシングルトンのインスタンスが1つしか必要ない場合、これによりユーザーは不注意にこの要件を覆すことができます。コンストラクタをprivateにした場合、GetInstance()を呼び出すことはExampleオブジェクトを作成する唯一の方法であり、したがって1つのインスタンスのみを作成できるようにする必要があります。

静的オブジェクトは、作成されたのと逆の順序で破棄されることに注意してください。これは、オブジェクトが互いに参照する場合に問題を引き起こします。これはあなたのコードを管理する人々のための罠です。もしあなたがそのようなオブジェクトをいくつも持っていれば、これはすぐに手に負えないものになります。ただ、グローバル変数が指摘すべてで、ある

https://sites.google.com/site/steveyegge2/singleton-considered-stupid

0

私はシングルトンの全体の概念を忘れてしまったと思います。シングルトンとは、インスタンスが1つしかないことを意味しますが、パブリックコンストラクタは多くのオブジェクトを構築できます。

+0

1つのプログラムに両方の方法が存在する可能性はありますか?多くのコードがこのように書かれていますので、私はどんな邪魔になるのですか – jasonkim

+0

public constructor + 'singleton pattern'いくつかのオブジェクトはシングルトンとして、そしていくつかは通常のものとして扱われますか? – nothrow

+1

@ y26jinもちろん、それらは1つのプログラムに存在することができますが、パターンは壊れています。 – neciu

1

シングルトンデザインパターンを使用する場合は、常にコンストラクタ(コピーコンストラクタも同様)と演算子= privateを指定して、指定されたクラスのインスタンスが1つだけ存在するようにする必要があります。さもなければ、シングルトンパターンはあまり意味がありません。

0

私はその例が壊れていると思います。ユーザーは複数の「シングルトン」を作成することができますし、明らかにシングルトンは存在しません。

で、シングルトンコンストラクタはプライベートでなければなりません。

0

コンストラクタをprivateにしても、Singletonクラスは作成されません。そのためには、コンストラクタを呼び出す前に他のインスタンスがメモリに存在しないことを確認する必要があります。コンストラクタがプライベートであっても、静的クラスメンバからクラスのインスタンスをいくつでも作成できます

0

シングルトンは、作成されるクラスが1つだけであることを確認する手法です。パブリックコンストラクタを公開することによって、明らかに複数のインスタンスのためのドアを開くことになります。したがって、クラスはシングルトンと呼ばれることはありません。

しかし、静的なGetInstance()メソッドはまだありますが、これはシングルトンインターフェイスとしては多少期待されていて、誰がコードを書き込んでいないのか(または後で何人かの著者に)紛らわしくなります。

関連する問題