0

オブジェクトの1つ(オブジェクトAと呼びましょう)が直接ロードした画像を使用するGUIアプリ(シンプルなゲーム)に取り組んでいます。ゲームなどを再構成するたびにファイルをリロードする必要がないように、ゲームの開始時に画像をロードするメソッドを実装しています。そのメソッドは、必要なすべての画像を配列としてロードし、次に別のメソッド ( BufferedImage[] getImages()); この配列を返します。このメソッドが属するクラス (オブジェクト B、JPanel) は、オブジェクト A を描画します。オブジェクト A は、オブジェクト C (もちろん、オブジェクト B もインスタンス化する JFrame) によってインスタンス化されます。

getImages()メソッド呼び出しを介して参照を渡すことなく、オブジェクト A のメソッドからオブジェクト B のメソッドに直接アクセスできるかどうかを知りたいです。それは完全に可能ですか (ClassPath などを介して)、そうすることは良いプログラミング方法でしょうか?

4

2 に答える 2

0

シングルトンパターンを探しているようです。これを行う:

public class ImageContainer {
    private final BufferedImage[] images = null;

    private static ImageContainer _instance = new ImageContainer();

    // NOTE PRIVATE CONSTRUCTOR
    private ImageContainer() {
        BufferedImage[] images = loadImages();
    }

    public static ImageContainer getInstance() {
        return _instance;
    }

    private BufferedImage[] loadImages() {
        // Do the loading image logic
    }

    // You might not want this in favor of the next method, so clients don't have direct access to your array
    public BufferedImage[] getImages() {
        return images;
    }

    public BufferedImage getImage(int index) {
        return BufferedImage[i];
    }
}

次に、画像が必要なときはいつでも

ImageContainer.getInstance().getImage(3);

配列の代わりに を使用EnumMapして、コードでどの画像を返すかを簡単に知ることもできます。


ところで、静的メソッドを使用する場合と使用しない場合のさまざまな理由に関する優れた議論をここで読むことができます。

于 2012-11-28T22:57:13.120 に答える
0

getImages が静的メソッドである場合にのみ、参照なしで B の getImages() メソッドを呼び出すことができます。これは、状況に応じて、良いアイデアである場合とそうでない場合があります。

もう 1 つのオプションは、B を「シングルトン」クラスにすることです。おおよそ次のように行うことができます。

public class B {
  private static B theInstance;
  private bufferedImage[] images;
  private B() {
  }

  public static B getInstance() {
    if(theInstance == null) {
      theInstance = new B();
    }
    return theInstance;
  }

  public BufferedImage[] getImages() {
       if(images == null) {
            /* get the images */
       }
       return images;
  }
}

ただし、シングルトンは一部の人々に眉をひそめていることに注意してください。代替手段は依存性注入です。

于 2012-11-28T22:57:44.880 に答える