共六个类:Vehicle.java(车类), Car.java(轿车类), Bus.java(公共汽车类), Engine.java(发动机), VehicleFactory.java(汽车工厂) 和 VehicleTest.java(测试类),具体代码分别如下:
***************************************************************
abstract class Vehicle {
Engine engine;
double speed;
double mileage;
public Vehicle() {
}
public Vehicle(Engine engine) {
this.engine = engine;
}
public Vehicle(Engine engine, double mileage) {
this.engine = engine;
this.mileage = mileage;
}
public Vehicle(Engine engine, double speed, double mileage) {
this.engine = engine;
this.speed = speed;
this.mileage = mileage;
}
public Engine getEngine() {
return engine;
}
public void setEngine(Engine engine) {
this.engine = engine;
}
public double getSpeed() {
return speed;
}
public void setSpeed(double speed) {
this.speed = speed;
}
public double getMileage() {
return mileage;
}
public void setMileage(double mileage) {
this.mileage = mileage;
}
public double drive() {
this.setMileage(speed * (Math.round(Math.random() * 6)) + mileage);
return mileage;
}
public abstract double calGC();
public String toString() {
return "Type: " + this.getClass().getName() + ", Horsepower: "
+ engine.horsepower + ", Speed: " + speed + ", Mileage: "
+ mileage + ", Gas consumed: " + calGC();
}
}
***************************************************************
public class Car extends Vehicle {
public Car() {
}
public Car(Engine engine) {
this.engine = engine;
}
public Car(Engine engine, double mileage) {
this.engine = engine;
this.mileage = mileage;
}
public Car(Engine engine, double speed, double mileage) {
this.engine = engine;
this.speed = speed;
this.mileage = mileage;
}
public double calGC() {
return mileage * 2;
}
}
***************************************************************
public class Bus extends Vehicle {
public Bus() {
}
public Bus(Engine engine) {
this.engine = engine;
}
public Bus(Engine engine, double mileage) {
this.engine = engine;
this.mileage = mileage;
}
public Bus(Engine engine, double speed, double mileage) {
this.engine = engine;
this.speed = speed;
this.mileage = mileage;
}
public double calGC() {
return mileage * 3 + 20;
}
}
***************************************************************
public class Engine {
double horsepower;
public Engine() {
this.horsepower = 1;
}
public Engine(double horsepower) {
this.horsepower = horsepower;
}
public double getHorsepower() {
return horsepower;
}
public void setHorsepower(double horsepower) {
this.horsepower = horsepower;
}
}
***************************************************************
public class VehicleFactory {
public static Vehicle makeVehicle(Engine e) {
if ((1 <= e.getHorsepower()) && e.getHorsepower() <= 50) {
return new Car(e, 0);
} else if ((50 < e.getHorsepower()) && e.getHorsepower() <= 100) {
return new Bus(e, 0);
}
return null;
}
}
***************************************************************
public class VehicleTest {
public static void main(String[] args) {
// 新建一辆马力28, 速度50的车
Engine e1 = new Engine(28);
Vehicle v1 = VehicleFactory.makeVehicle(e1);
v1.setSpeed(50);
v1.drive();
v1.drive();
System.out.println("第一辆车:");
System.out.println(v1);
// 新建一辆马力88, 速度88的车
Engine e2 = new Engine(88);
Vehicle v2 = VehicleFactory.makeVehicle(e2);
v2.setSpeed(88);
v2.drive();
v2.drive();
System.out.println("第二辆车:");
System.out.println(v2);
}
}
***************************************************************
运行结果如下:
第一辆车:
Type: Car, Horsepower: 28.0, Speed: 50.0, Mileage: 200.0, Gas consumed: 400.0
第二辆车:
Type: Bus, Horsepower: 88.0, Speed: 88.0, Mileage: 616.0, Gas consumed: 1868.0
***************************************************************