2

スプライトである GameEngine クラスと、シングルトンであり、多くのデータを保持する GameModel があります。

次に、データを取得します

GameModel.getInstance().variable;

私のゲーム エンジンには現在それらがたくさんあります。常に作成するのではなく、GameEngine で GameModel への参照があれば、より効率的かどうか疑問に思っていました。

private var _data:GameModel = GameModel.getInstance();
trace(_data.variable);

私はそれがより効率的であるとかなり強く感じていますが、もし誰かが私に確かに知らせてくれれば、この方法で潜在的に欠陥を見ることができるかどうか教えてください.

4

2 に答える 2

4

インスタンスをプロパティに格納することは間違いなく良い考えです。ルックアップが高速になるだけでなく、GameModel の実装の詳細に関する GameEngine の知識が低下するからです。

たとえば、GameModel.getInstance()GameEngine クラス内に多数の呼び出しがあり、シングルトンの動作を削除することにしたとします。これらすべての呼び出しを書き直すことになりますが、インスタンスをプロパティにキャッシュした場合は、1 行だけ書き直す必要があります。

とはいえ、シングルトンについては完全に忘れてください。シングルトンは時期尚早の最適化よりもはるかに悪いことですが、使用する必要がある場合は、少なくともクライアント クラスのプロパティにインスタンスを格納してください。

于 2012-07-04T15:19:21.723 に答える
2

確かにそれをインスタンスとして追加できますが、それが顕著な違いを生むとは思えません. 時期尚早の最適化はすべての悪の根源であり、それ:)

本当に興味がある場合は、ベンチマークを実行して、実際に何かが変わるかどうかを確認してください。

編集:そうです、ここでの他の回答が言及しているように、シングルトンを完全に削除したい場合があります。依存性注入については、swiftsuspenders https://github.com/tschneidereit/SwiftSuspenders/を参照することをお勧めします (または、swiftsuspenders を含む優れた軽量 MVC ソリューションについては、robotlegs でさえ)。

于 2012-07-04T09:24:52.923 に答える