通过工厂方法构建Java对象:属性与构造函数(通过方法)
我有一个类(a),它通过工厂方法(2)使用(1)另一个类(B): 例如:通过工厂方法构建Java对象:属性与构造函数(通过方法),java,constructor,factory,Java,Constructor,Factory,我有一个类(a),它通过工厂方法(2)使用(1)另一个类(B): 例如: (B) public class OrdinaryRoom{ private String name = "ordinaryRoom"; } 我也可以这样写(A): (A)和(A2)有什么区别? 用一个代替另一个有一些好处?我看到的区别是: 初始化
(B)
public class OrdinaryRoom{
private String name = "ordinaryRoom";
}
我也可以这样写(A):
(A)和(A2)有什么区别?
用一个代替另一个有一些好处?我看到的区别是:
- 初始化
的时刻有一点不同:使用(A),它是在
构造函数内部完成超级构造函数MazeGame()
调用后初始化的。对于(A2),初始化发生在超级构造函数Object()
调用完成后,任何Object()
构造函数的第一行之前。对你来说,这没什么区别MazeGame(…)
- (A2)中的初始化适用于
将拥有的所有构造函数,而(A)方法仅在单个MazeGame
构造函数中初始化MazeGame()
,不影响将来可能添加的任何构造函数room
- 将初始化移动到
字段“允许”您从源代码中删除构造函数,并依赖编译器在没有构造函数的情况下生成的默认构造函数。我不认为这是一种好处,而是一种维护风险,因为如果将来您想添加一些构造函数,例如room
constructor,这不仅会添加新的构造函数(预期结果),还会删除默认的构造函数,这可能是非常意外的MazeGame(Room Room)
(B)
public class OrdinaryRoom{
private String name = "ordinaryRoom";
}
(A2)
public class MazeGame{
private Room room = makeRoom(); // (1)(2)
protected Room makeRoom(){
return new OrdinaryRoom();
}
}