设计模式定义

时间:2010-11-17 21:25:38

标签: design-patterns

我正在尝试制作一款简单的游戏。我有一个用于屏幕缓冲区的类,一个用于图像的类,以及一个用于精灵的类。我的问题是:
由于每个sprite都需要“属于”某个图像(sprite只保存某些图像中的坐标,以及指向图像的指针/引用),我应该将图像类传递给sprite构造函数,如下所示:

Sprite spriteInstance(imageInstance, rect, ...);

或者通过图像类

的方法返回精灵
Sprite spriteInstance = imageInstance.createSprite(rect, ...);

或者这是个人偏好的问题。 (两者显然都有效,我只是想知道一个人是否被认为是“正确”“专​​业”的方式。)
图像/屏幕关系也是如此:屏幕应返回表面,还是图像通过屏幕。

我还没有尝试实现的第三个选项是拥有一个“游戏”类,并执行此操作:

Game gameInstance;
Image imageInstance = gameInstance.loadImage(path);
Sprite spriteInstance = gameInstance.newSprite(imageInstance, rect, ...);

如果推荐上面的第二种/第三种方法,是否应该将sprite类构造函数作为“朋友”将图像类设为私有,还是保留为公共?这种类型的方法是否有一个名称,我可以查找进一步的见解?这是什么被称为“工厂模式”?

由于

1 个答案:

答案 0 :(得分:1)

看起来你在这里有两个不同的问题:在哪里放置基于图像创建精灵的逻辑,以及是否使用工厂方法。

我建议反对imageInstance.createSprite,除非图像知道存在一个名为Sprite的类实际上是有意义的。如果可能的话,您希望保持单向可视性。因此,除非图像依赖于精灵,否则不要让它知道类Sprite存在。

我可能会建议

Sprite s = Sprite.forImage(image, rect);

如果不了解游戏,图片和精灵的课程(以及职责),我不能说更多。

至于工厂方法,是的,坚持下去。有效的Java有很好的章节。