システムに問題\設計上の問題があります。私がいたところから始めます:
私はJavaでゲームエンジンを作成していました.ゲームコンポーネントは、ゲームのmain\singletonインスタンス(ワールド、ファイルシステムなど)を参照するために一般的に必要でした. コードでファイルを開く必要があるときはいつでも、次のように記述します。
Global.game.getFilesystem().openFile(...)
この Game オブジェクトを絶えず渡す実用的な方法はまったくありません。私はペストのようなシングルトンのデザインパターンを避けてきましたが、むしろこれを回避したいと思っています...
とにかく、これで GameCore ライブラリができました。私は今、それを使ってゲームを実装しています。明らかに、その過程でゲームを拡張したいと考えています。問題は、私のクラスが同じ種類のリソースにアクセスするための便利な方法を必要としているということです。これはすべて問題ありませんが、Global.game は抽象クラス Game としてしか参照できないため、Global.game を使用できません (たとえそれがMyRpgGame のインスタンスが含まれています)、タイプ MyRpgGame が必要になる場合があります。確かに、型キャストはできますが、コード全体で乱雑で一定です。だから私が思いついた唯一の解決策は(私は本当に好きではありませんが...)、次のようなものです:
Game.game や RpgGame.game などでゲームを参照する場所...
public abstract class Game
{
...
public static Game game = null;
public Game()
{
if(game != null)
throw new InitializationException("Cannot instantiate multiple instances of game.");
game = this;
...
}
そして、私の RpgGame では、Game で静的フィールド ゲームを非表示にします。
public class RpgGame extends Game
{
public static RpgGame game = null;
public RpgGame()
{
if(game != null)
throw new InitializationException("Cannot instantiate multiple instances of game.");
game = this;
}