关于#java#的问题:通过图和说明写出具体的编程,因为是外语专业学习

img

img


通过图和说明写出具体的编程,具体说明都有,因为是外语专业学习,对于这些还是不懂,求鸽鸽们能解答

回答这个问题还真是花费时间,我这边出了个参考的案例,仅供参考,运行结果,麻烦采纳:

img

IVehicle类:

package vehicle;
/**
 * @author darryl
 * @date 2022/11/30 10:02
 */
public interface IVehicle {

    void setPlace(String place);

    void setDestination(String destination);

    void run();
}

IDurable类

package vehicle;

/**
 * @author darryl
 * @date 2022/11/30 10:03
 */
public interface IDurable {

    double addFuel(double count);
}

ICar类

package vehicle;

/**
 * @author darryl
 * @date 2022/11/30 10:04
 */
public class ICar implements IVehicle, IDurable {

    @Override
    public double addFuel(double count) {
        return 0;
    }

    @Override
    public void setPlace(String place) {

    }

    @Override
    public void setDestination(String destination) {

    }

    @Override
    public void run() {

    }
}

Factory类

package vehicle;


/**
 * @author darryl
 * @date 2022/11/30 10:03
 */
public class Factory {

    public ICar getByCar() {
        BydCar bydCar = new BydCar(1000);
        String[] map = new String[]{"北京", "上海", "广州", "深圳"};
        bydCar.initMap(map);
        return bydCar;
    }
}

ConceptCar 类


package vehicle;

/**
 * @author darryl
 * @date 2022/11/30 10:06
 */
public abstract class ConceptCar extends ICar {

    private String place;

    private String destination;

    private double fuel;

    private double distance;

    public ConceptCar(double remainder) {

    }

    @Override
    public void run() {
        if (this.distance <= 0) {
            navigate();
        }
        engineStart();
        while (true) {
            if (this.fuel <= 10) {
                System.out.println("车辆油料小于10,车辆即将停止");
                engineStop();
                break;
            }
            if (this.distance <= 0) {
                System.out.println("已经到达目的地,车辆停止");
                engineStop();
                break;
            }
            double engineRun = engineRun(this.fuel);
            //每次调用从油料单元中 -1
            this.fuel = this.fuel - 1;
            this.distance = this.distance - engineRun;
            System.out.println("当前distance=" + distance);
        }
    }

    @Override
    public abstract double addFuel(double fuel);

    public abstract void navigate();

    public abstract void engineStart();

    public abstract double engineRun(double fuel);

    public abstract void engineStop();

    public String getPlace() {
        return place;
    }

    @Override
    public void setPlace(String place) {
        this.place = place;
    }

    public String getDestination() {
        return destination;
    }

    @Override
    public void setDestination(String destination) {
        this.destination = destination;
    }

    public double getFuel() {
        return fuel;
    }

    public void setFuel(double fuel) {
        this.fuel = fuel;
    }

    public double getDistance() {
        return distance;
    }

    public void setDistance(double distance) {
        this.distance = distance;
    }
}

BydCar 类


package vehicle;

/**
 * @author darryl
 * @date 2022/11/30 10:05
 */
public class BydCar extends ConceptCar {

    private String[] map;

    public BydCar(double fuel) {
        super(fuel);
    }

    @Override
    public double addFuel(double fuel) {
        this.setFuel(this.getFuel() + fuel);
        return this.getFuel();
    }

    @Override
    public void navigate() {

    }

    @Override
    public void engineStart() {
        System.out.println("车辆启动......");
    }

    @Override
    public double engineRun(double fuel) {
        return fuel;
    }

    @Override
    public void engineStop() {

    }

    public void initMap(String[] map) {
        this.map = map;
    }
}

GasStation 类


package client;

import vehicle.IDurable;

/**
 * @author darryl
 * @date 2022/11/30 10:25
 */
public class GasStation {

    private GasStation() {

    }

    public static GasStation findGasStation() {
        return new GasStation();
    }

    public void supply(IDurable durable, double fuel) {
        durable.addFuel(fuel);
    }
}

Entry 类


package client;

import vehicle.Factory;
import vehicle.ICar;

/**
 * @author darryl
 * @date 2022/11/30 10:18
 */
public class Entry {

    public static void main(String[] args) {
        Factory factory = new Factory();
        ICar car = factory.getByCar();
        Driver driver = new Driver();
        driver.setCar(car);
        driver.drive();
    }
}

Driver 类

package client;

import vehicle.ConceptCar;
import vehicle.ICar;

/**
 * @author darryl
 * @date 2022/11/30 10:20
 */
public class Driver {

    private ICar car;

    public void setCar(ICar iCar) {
        this.car = iCar;
    }

    public void drive() {
        this.car.setPlace("北京");
        this.car.setDestination("深圳");
        ConceptCar car = (ConceptCar) this.car;
        car.setDistance(100);
        car.setFuel(20);
        while (car.getDistance() > 0) {
            this.car.run();
            if (car.getFuel() <= 0) {
                GasStation.findGasStation().supply(car, 10);
            }
        }
    }
}

补充 navigate


@Override
    public void navigate() {
        System.out.println("路线设定");
        int placeIndex = 0;
        int distinationIndex = 0;
        for (int j = 0; j < this.map.length; j++) {
            if(map[j].equals(this.place)) {
                placeIndex = j;
            }
            if(map[j].equals(this.destination)) {
                distinationIndex = j;
            }
        }
        this.distance = distinationIndex-placeIndex>0?(distinationIndex-placeIndex)*10:(placeIndex-distinationIndex)*10;;
    }