1

我读过这本书First Java: Design Patterns并且是新手。

我制作自己的游戏引擎只是为了练习,我正在使用单例模式(我知道这对你们大多数人来说是一种罪过)来创建独特的类,例如:InputManager、ScreenManager、GameManager 等。我真的觉得它很有用,但是我不想逆潮流而动。

使用工厂方法创建这些类(可能将它们创建为内部类)然后将这些对象传递给需要它们的任何类是否更明智?

这也是坏习惯吗?

我只是想确保这些独特的类有一个实例,并且只有一种访问它们的方法。

也许是这样的:

public final class Factory(){
private static final InputListener inputlst = new InputListener();  
private static final Screen window = new Screen();
private static final GameManager gameManager = new GameManager();
public Factory(){
}
public static InputListener getInputListener(){
    return inputlst;
}
public static Screen getWindow(){
    return window;
}
private static class InputListener implements KeyListener, MouseListener, MouseMotionListener, MouseWheelListener{      
}
private static class Screen extends JFrame{
}
private static class GameManager{
}
4

3 回答 3

1

我只是想确保这些独特的类有一个实例,并且只有一种访问它们的方法。

对我来说听起来像是单例模式:类中的静态访问器返回该类的单个实例。

除非您发现绝对需要,否则不要尝试使用内部类/传递事物使事情变得过于复杂。请参阅单例模式和工厂模式之间的区别,以获取可能对您有所帮助的进一步阅读。

于 2013-01-31T06:54:41.817 回答
1

如果你想拥有这些唯一类的一个实例,那么单例就是你的模式,它有一些方法,比如 getInstance 等。

工厂模式是一种创建和返回不同类型的新对象,但从同一个子类扩展而来的模式。这是一种抽象类实例化的方法。

于 2013-01-31T07:15:35.410 回答
1

坦率地说,模式的存在是有原因的。原因很简单。您希望将来在您的代码中发生什么变化。没有什么像good practice to use patterns. 您使用您期望更改的位置,根据您期望更改的位置,您需要将更改的部分取出并与保持不变的部分分开。当你这样做时,这些模式可以帮助你理解。

没有单身不是邪恶的。它的用法是邪恶的。Singleton 是一种奇妙的模式,用于解决 OOP 和 OOAD 的一个非常独特的问题。

工厂不能代替 SINGLETON。两者都有非常独特的主张。谁知道呢,如果您花时间仔细了解您的需求(和未来的需求),您可能会意识到您需要同时使用这两者。您可能只需要一个工厂,并且可能需要将该工厂设为单例。

Understand the change, the future change and separate out what changes from what remains constant

于 2013-01-31T07:20:11.473 回答