1

シンプルな iOS tic-tac-toe ゲームのこのデザイン パターンを検討しています。

  • GameStateボード上の X と O の位置を追跡するシングルトン クラス
  • GameDisplayボードの表示とタッチ イベントを処理するシングルトン クラス

この状態と表示の分離は、理にかなっているように思えます。GameDisplayボード上のタップを、GameStateボードが更新され、勝利条件がチェックされる場所に転送できます。次に、別の X/O を引くか、ゲームが完了し、誰が勝者であるかをGameState伝えることができます。GameDisplay私の現在の計画はGameState.playAtSquare(Square s)、2 つのシングルトン間の通信などの方法を使用することです。

この設計は、シングルトンを使用することの大きな欠点の犠牲になりますか? iirc シングルトン クラスの使用についてはいくつかの論争があります。

4

3 に答える 3

1

シングルトンの欠点は、グローバル変数の欠点と同じです。つまり、状態を持つプログラム内のオブジェクトは、プログラム内の他の場所から直接アクセスおよび変更できます。

デザインにとっての意味は、プログラムの残りの部分がそれらのシングルトンの存在。

シングルトンがプログラムに「溶接」された後、この状況から問題が発生することがよくあります。後でGameStateとGameDisplayを変更すると、プログラムの残りの部分に意図しないノックオン効果が生じ、効果を制限または停止するための「回避策」が見つかる可能性があります。これらの変更のうち、コードの他の場所で醜い/ハッキーなソリューションにつながる可能性があります。

ほとんどの場合、シングルトンに代わる好ましい方法があります。「事前に入力する回数を少し減らす」という理由でシングルトンに誘惑される人もいますが、プログラムが少し成長し始めると、ほとんどの場合、不必要な複雑さ、特殊なケース、癖の原因になります。

于 2012-04-14T16:41:08.453 に答える