私はプログラミングを独学しようとしている最中です。私は、ほとんどの人が始めると確信しているのと同じ方法で始めました。単純なことをそれほど単純ではない方法で行う、小さくて厄介なアプリやゲームを作成します。最近、OOP 設計を使用して、より優れた、よりモジュール化されたコードを作成する、もう少し複雑なゲームを作成することで、次のステップに進もうとしています。
私が抱えている主な問題は、メインの StateManager (FSM) クラスの設計です (イントロ/メニュー/ゲーム/その他の画面状態を切り替えるため)。私は高低を見てきましたが、それらを設計する2つの方法しか実際に見たことはありません:
状態を切り替えるには、switch/case ステートメント + 列挙型を使用します。
ベクトルへの/からの状態のプッシュ/ポッピングを処理するシングルトン FSM クラスを作成します。
さて、私の問題は、switch case ステートメントが非常に反復的でぎこちなく、このプロジェクトを使用して OOP を独学するという私の目標に反することです。
私の2番目の大きな問題は、「シングルトン」の提案です。
前に言ったように、私は自分自身を学ぼうとしていますが、プログラミングに関しては、特に OOP やデザイン パターンなどの分野で、まだ学ぶべきことがたくさんあります。私が見つけたすべての単一の「シングルトンは悪」のスレッドと議論について、人々がコードでシングルトンを使用して「エンジン」クラスとFSMを作成するチュートリアルと参照を見つけるという問題に遭遇しました。それは非常に一貫した混合メッセージです。
理由がわからないだけだと思います...クラスの単一のオブジェクトのみを持ちたい/意図している場合でも、コンストラクターをプライベートにしてシングルトンを作成することが必要/有益なのはなぜですか? シングルトンがいかに悪いか、それらが本質的にグローバルである方法、マルチスレッドの邪魔になる方法、そしてどれだけ多くのプログラマーがそれらを使いすぎているか、単に悪い設計であると考えているかについて多くのことを読んできました...それでも私は例の後に例を見ますそれらを使用している人々の数、および代替方法を示す反例はほとんどありません。
通常のクラスだけで同じようなことができないのでしょうか?インスタンスの作成を明示的に制限する目的は何ですか? シングルトンについて否定的なことしか聞いたことがありませんが、人々は常にそれらを使用しているようです...シングルトンとOOPについて完全に何かが欠けていますか?
シングルトンの使用は単なるトレンドですか、それとも人々がシングルトンを「悪」と呼ぶときのトレンドですか? どうすればこれを回避できますか..? スイッチ/ケース FSM とシングルトン FSM の間に何かありませんか?? クラスのシングルトンを作成せずに、プログラムの状態システムをまったく同じ方法で設計できませんでしたか? それは何かを変えるでしょうか?[混乱]