多次构造同一对象的好风格

时间:2012-01-11 11:18:16

标签: java oop design-patterns computer-science

我必须在不同地方的代码中生成同一对象的三个实例。

//This puts ship in new location.
spaceShipLocation location = new PhyiscsEngine();

在代码中重复3次是否会被认为是不好的风格,还是应该将其包装在方法中? (我的直觉说不)。

P.S 这是介绍计算机科学课程。

5 个答案:

答案 0 :(得分:5)

如果您需要实例化一个类,请继续执行。在方法中包装每个new Foo()语句会使您的代码难以阅读和维护。

此外,既然你提到了好的风格',Java命名约定规定类名应以大写字母开头并使用驼峰式。 spaceShipLocation(假设它是一个类,由于代码段)实际应该是SpaceShipLocation

答案 1 :(得分:2)

这取决于你对“相同”的理解:

  1. 等于:a.equals(b)
  2. 相同:a == b
  3. 您通常有两个简单的选项(在各种更复杂的选项中):

    1. Equal:覆盖PhysicsEngine.equals()(和hashCode()!)。
    2. 相同:将PhysicsEngine设为singleton,并使用静态方法(例如PhysicsEngine.getInstance())访问单个实例。为了防止用户创建新实例,您需要PhysicsEngine构造函数private

答案 2 :(得分:0)

[由于我的问题不明确,我提出了两个解决方案]

1)您的教师希望您使用Prototype Design Pattern - 来使用现有对象来创建新对象。

  • 避免以标准方式创建新对象的固有成本(例如,使用'new'关键字),当它对于给定的应用程序来说过于昂贵时。

2)如果您需要在整个系统中拥有相同的对象实例。然后Singleton Pattern就是您的解决方案。

  • 用于通过将类的实例化限制为一个对象来实现单例的数学概念。当需要一个对象来协调整个系统的操作时,这非常有用。

您可以在维基百科文章中找到示例代码。

答案 3 :(得分:0)

Effective Java建议我们考虑静态工厂..

When there is no need to subclass…
• And one or more of the following
– Significant performance advantage exists
– Need flexibility to return different types
– Can avoid making classes public
– Need control over instances

答案 4 :(得分:0)

Singletons Considered Harmful

如果你发现你正在另一个类中“新建”一个类(特别是多次),那么注入该类的接口会更好。