我正在开发GUI应用程序(简单游戏),其中一个对象(我们称之为对象A)使用我直接加载的图像。我正在实现在游戏开始时加载图像的方法,这样我每次重新配置游戏时都不需要重新加载文件等。该方法将所有必要的图像作为数组加载,然后是另一种方法(BufferedImage[] getImages()
);返回此数组。该方法所使用的类(对象B,JPanel)绘制对象A,而对象A又由对象C(JFrame实例化,当然,它也实例化对象B)。
我想知道我是否可以直接从Object A的方法访问Object B的getImages()
方法,而不通过方法调用传递引用。是完全可能的(通过ClassPath等),并且这样做是否是良好的编程习惯?
答案 0 :(得分: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
代替数组,以便更轻松地了解代码中要返回的图像。
顺便说一下,你可以阅读关于the different reasons when you would and would not use a static method here.
的精彩讨论答案 1 :(得分:0)
只有当getImages是静态方法时,才可以调用B的getImages()方法而不需要引用。根据您的情况,这可能是也可能不是一个好主意。
另一种选择是使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;
}
}
但请注意,单身人士不赞成单身人士。 替代方案是dependency injection。