如果你只是想捕捉的構造函數的參數,你可以使用:
public RobotDriver(Robot robot) {
this.robot = robot;
}
如果你要創建的構造函數中的參數的副本,有幾種可能性。如果您Robot
實現都有一個默認的構造函數,你可以這樣做:
public RobotDriver(Robot robot) {
this.robot = robot.getClass().newInstance();
}
如果做不到這一點,你可以修改你的Robot
接口包括複製功能:
public RobotDriver(Robot robot) {
this.robot = robot.makeCopy();
}
或者你可能會使Robot
一個Cloneable
類並修改Robot
接口以使clone()
爲公開(默認情況下爲protected
):
public RobotDriver(Robot robot) {
this.robot = robot.clone();
}
(這基本上是makeCopy()
的另一個版本。)
最後,應用Juned Ahsan's answer,您可以定義RobotDriver
構造方法來工廠作爲一個參數,或者默認的構造函數,有一個可設置的靜態默認出廠:
public class RobotDriver {
// basic robots by default
private static RobotFactory defaultFactory = new BasicRobotFactory();
private static RobotFactory factory = defaultFactory;
public RobotDriver() {
robot = factory.makeRobot();
}
/**
* Change the factory for new instances of RobotDriver
*/
public static void setFactory(RobotFactory factory) {
this.factory = factory == null ? defaultFactory : factory;
}
}
你不想使用'this.robot = robot;'? – 2014-10-05 02:14:25
@TedHopp我在想那個。但是如果我想創建一個新的呢? – mrQWERTY 2014-10-05 02:15:17
你的問題是什麼? 「this.robot = robot」是簡單而好的答案,我想。 – 2014-10-05 02:17:26