3

このサイトでは「シングルトンは悪」をたくさん見ました。シングルトンは病的な嘘つきだと私はほとんど信じさせます。しかし、それが本当なら、なぜココアにこれほど多くのシングルトンがあるのでしょうか?shareApplication、shareManagerなどのように。そして、シングルトンパターンを使用しない場合、どうすれば同じようなことができるのだろうか。たとえば、インスタンスが1つしかないことを確認し、必要なときにアクセスします。

ですから、もっと良い方法があることがわかるまで、私はそのことわざを疑うでしょう。

私を助けてください。ありがとう

4

3 に答える 3

3

本質的に悪である単一の機能またはパターンはありません。用途もgotoあり、読みやすさを向上させることもあります。「シングルトンは悪」は、多くの初心者開発者がそれらを誤用する傾向があるという事実から来ています。したがって、これは常識であり、常識が最善の解決策ではない場合もあります。

あなたの例shared...では、技術的にシングルトンではありません。数千のインスタンスを同時に作成できUIApplicationますNSFileManager。それらはサービスロケーターのようなものです(「アプリケーションを見つけて」、「デフォルトのファイルマネージャーを見つけて」)。これらのメソッドは、99%の時間で必要ないくつかの有用な共有値を提供します。これにより単体テストが難しくなる可能性がありますが、メリットはそれだけの価値があります。

于 2012-11-09T10:51:10.073 に答える
0

シングルトンは通常、グローバルデータをに保存するのに役立ちます。

ただし、シングルトンは通常、順序や理由なしに、あらゆる種類のランダムなメソッドや変数のジャンクヤードとして使用されます。

http://blogs.msdn.com/b/scottdensmore/archive/2004/05/25/140827.aspx

これがおそらく人々がシングルトンの使用を嫌う理由です。

シングルトンを混沌とした振る舞いで誤用しないのであれば、私の意見ではそれを使用することを避けてはなりません。

于 2012-11-09T10:47:52.103 に答える
0

ココアには、問題が発生したすべてのものに対して「悪」および「有害と見なされる」と宣言するのがクールになるずっと前に設計されたため、非常に多くのシングルトンがあります。

シングルトンは完全に悪ではありません。正しく使用すると、多くの状況で非常にうまく機能します。あなたはそれらに関連する問題について知っていますが、それはあなたがそれらをすぐに取り除く必要があるという意味ではありません。さもなければ世界は終わります。一部のプロジェクトの現実はそのようなものであるため、シングルトンの問題が発生することはありません。

明らかに、ライブラリシングルトンがすでに存在する場合は、それらの使用を避けることはできません。NSApplicationやNSWorkspaceなどの特定のオブジェクトが必要な場合は常に、それらのsharedApplication / sharedWorkspaceメソッドを使用する必要があります。これが、システムフレームワークの設計方法です。

シングルトンの代わりに独自のコードを設計する場合、オブジェクトがファクトリによってのみ作成されるようにし、この種のオブジェクトが以前に要求された場合に前のインスタンスを返すようにいくつかのファクトリメソッドをコーディングできます。この設計は、モックの代わりにモックを置き換えることができないというグローバルおよびシングルトンの典型的な欠点を回避します。

于 2012-11-09T11:11:51.850 に答える