设计咨询:选择Singleton,Factory等

时间:2013-01-31 06:50:16

标签: java design-patterns singleton factory

我已经阅读了这本书 First Java:Design Patterns 并且是新手。

我正在制作我自己的游戏引擎,只是为了练习而我正在使用Singleton Pattern(我知道你们大多数人都犯了罪)创建了独特的类,如:InputManager,ScreenManager,GameManager等。我真的找到了它有用,但我不想违背现行。

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

这也是不好的做法吗?

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

可能是这样的:

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{
}

3 个答案:

答案 0 :(得分:1)

  

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

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

除非你发现你绝对需要,否则不要尝试使用内部类/传递事物来使事情过于复杂化。有关可能对您有帮助的进一步阅读,请参阅Difference between singleton and factory pattern

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

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

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

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

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