据我了解,您希望Transformer类具有Robot功能或Car功能,但不能同时具有两者.
例如.:
class Transformer {
private Car car;
private Robot robot;
private Class currentState = Car.class;
public void fight() {
if (currentState.equals(Robot.class)
robot.fight();
}
public void drive() {
if (currentState.equals(Car.class)
car.drive();
}
public void transform() {
if (currentState.equals(Car.class)
currentState = Robot.class;
else
currentState = Car.class;
}
要实例化一个新的Transformer,你需要定义它的Car-Form及其Robot-Form,例如:
new Transformer(new OptimusPrimeRobot(), new GiantTruck());
与构造函数:
Transformer(Robot r, Car c) {
this.robot = r;
this.car = c;
}
使用OptimusPrimeRobot实现Robot和GiantTruck实现Car.
如果你愿意,你甚至可以懒惰地初始化你包含的类.定义字段:
Class carClass;
Class robotClass;
和一个构造函数:
Transformer(Class robotC, Class carC) {
this.robotClass = robotC;
this.carClass = carC;
}
然后制作机器人和汽车的getter方法:
private Robot getRobot() {
if(robot == null) {
robot = robotClass.newInstance();
}
return robot;
}
并调整您的代码,因此它使用Getters而不是字段:
getRobot().fight();
现在,您只需指定Transformer所包含的类,并且只在需要时实例化它们的对象.