我必须在不同地方的代码中生成同一对象的三个实例。
//This puts ship in new location.
spaceShipLocation location = new PhyiscsEngine();
在代码中重复3次是否会被认为是不好的风格,还是应该将其包装在方法中? (我的直觉说不)。
P.S 这是介绍计算机科学课程。
答案 0 :(得分:5)
如果您需要实例化一个类,请继续执行。在方法中包装每个new Foo()
语句会使您的代码难以阅读和维护。
此外,既然你提到了好的风格',Java命名约定规定类名应以大写字母开头并使用驼峰式。 spaceShipLocation
(假设它是一个类,由于代码段)实际应该是SpaceShipLocation
。
答案 1 :(得分:2)
这取决于你对“相同”的理解:
a.equals(b)
a == b
您通常有两个简单的选项(在各种更复杂的选项中):
PhysicsEngine.equals()
(和hashCode()
!)。PhysicsEngine
设为singleton,并使用静态方法(例如PhysicsEngine.getInstance()
)访问单个实例。为了防止用户创建新实例,您需要PhysicsEngine
构造函数private
答案 2 :(得分:0)
[由于我的问题不明确,我提出了两个解决方案]
1)您的教师希望您使用Prototype Design Pattern - 来使用现有对象来创建新对象。
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)
如果你发现你正在另一个类中“新建”一个类(特别是多次),那么注入该类的接口会更好。