独占は悪魔であり、非読み取り専用/可変状態のシングルトンは「本当の」問題です...
読んだ後シングルトンは、病理学嘘つきですで提案されているようにジェイソンの答え私は最良の提示例提供し、この小さなちらほら出くわしたかシングルトンがしばしば誤用されているが。
グローバルは悪いです:
- a。名前空間の競合が発生します
- b。不当な方法で状態を公開します
シングルトンになると
- a。それらを呼び出す明示的なオブジェクト指向の方法は、競合を防ぐため、aをポイントします。問題ではありません
- b。状態のないシングルトンは(工場のように)問題ありません。状態を持つシングルトンは、再び2つのカテゴリに分類される可能性があります。それらは不変であるか、1回だけ書き込み、多くのファイルを読みます(config / propertyファイル)。これらは悪くないです。リファレンスホルダーの一種であるミュータブルシングルトンは、あなたが話しているものです。
最後の声明で彼はブログの「シングルトンは嘘つきだ」という概念について言及している。
これはモノポリーにどのように当てはまりますか?
独占のゲームを始めるには、まず:
- 最初にルールを確立するので、全員が同じページにいます
- ゲームの初めに皆が平等にスタートする
- 混乱を避けるために、1組のルールのみが提示されています
- ゲーム全体でルールを変更することはできません
さて、本当に独占をやったことがない人にとって、これらの基準は最高の状態で理想的です。独占の敗北は飲み込むのが難しいです。なぜなら、独占はお金の問題であり、もし負けた場合、他のプレイヤーがゲームを終えるのをじっくりと見なければならず、通常、損失は迅速でつぶれます。したがって、ルールは通常、他の人を犠牲にして一部のプレーヤーの自己利益を果たすために、ある時点でねじれます。
あなたは友達のボブ、ジョー、エドと独占をしています。あなたは帝国を急速に構築し、市場シェアを指数関数的に消費しています。対戦相手が弱くなり、血のにおいがし始めます(比喩的に)。あなたの相棒ボブは、彼のお金のすべてを可能な限り多くの低価値の物件にグリッドロックするために投入しましたが、彼は彼が期待したように高い投資収益率を受け取っていません。ボブは不運のストロークとしてボードウォークに着地し、ゲームから興奮します。
今やゲームはフレンドリーなサイコロの転がりから本格的なビジネスへと進んでいきます。ボブは失敗の例にされており、ジョーとエドは「あの男」のようになってしまいたくありません。それで、あなたが主役になることで、突然、あなたは敵になります。ジョーとエドは、テーブルの下での取引、バックザバックマネーインジェクション、過小評価されたハウススワッピング、そして一般的に、いずれかがトップに上がるまでプレイヤーとしての弱点となる練習を始めます。
次に、そのうちの1人が勝つ代わりに、プロセスが最初から始まります。突然、有限のルールのセットが動くターゲットになり、ゲームは、Survivor以降のすべての高評価の現実のテレビ番組の基礎を構成するタイプの社会的相互作用に退化します。なぜ、ルールが変化し、ルールがどのように/なぜ/何を表すのかについてコンセンサスがないためであり、さらに重要なのは、決定を下す人がいないためです。その時点で、ゲーム内のすべてのプレーヤーは自分のルールを作成し、2人のプレーヤーが疲れすぎてシャレードを維持し、ゆっくりと諦めるまで、混乱が続きます。
したがって、ゲームのルールブックがシングルトンを正確に表す場合、独占ルールブックは乱用の一例になります。
これはプログラミングにどのように適用されますか?
変更可能なシングルトンが存在する明らかなすべてのスレッド安全性と同期の問題は別として、1つのデータセットがある場合、複数の異なるソースによって同時に読み取り/操作でき、アプリケーション実行の存続期間中に存在します。たぶん、「ここで正しいタイプのデータ構造を使用していますか」と尋ねて、今がよい時でしょう。
個人的には、プログラマーがシングルトンをアプリケーション内のある種のねじれたクロススレッドデータベースストアとして使用することによってシングルトンを悪用するのを見てきました。コードに直接取り組んだので、それが遅く(スレッドセーフにするために必要なすべてのスレッドロックのため)、取り組むのが悪夢だった(同期バグの予測できない/断続的な性質のため)ことを証明できます。 「実稼働」条件下でテストすることはほとんど不可能です。確かに、システムはポーリング/シグナリングを使用してパフォーマンスの問題のいくつかを克服するように開発できたかもしれませんが、テストの問題を解決できず、「実際の」データベースがはるかに堅牢で同じ機能をすでに実現できるのに困る理由/スケーラブルな方法。
シングルトンは、シングルトンが提供するものを必要とする場合のみのオプションです。オブジェクトの書き込み専用の読み取り専用インスタンス。同じルールは、オブジェクトのプロパティ/メンバーにもカスケードする必要があります。