gpt4 book ai didi

针对真实场景的 Java 体系结构类设计

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:05:03 27 4
gpt4 key购买 nike

这就是我需要用Java实现的问题:

汽车可以是汽油车或柴油车,混合动力车可以是汽油车或柴油车,但不能同时使用两种。此外,混合动力汽车能够依靠电力行驶,而根本不使用汽油或柴油,并且仅在运行时决定是选择电力还是其他燃料来源(汽油或柴油,视情况而定)。

在这里,我需要考虑 OOP 概念来实现一个示例,当混合动力汽车以汽油模式运行时应调用汽油类型的方法,以及如果是柴油则应调用柴油类运行方法。

我是 OOP 的新手,我想出了以下设计,我知道如果有人能帮助我,这是错误的。

我用装饰器设计模式尝试了这个,如果上述场景的设计错误,请纠正我..

汽车界面

public interface Car {
public void running();
}

汽油车类

class PetrolCar implements Car{

public void running() {
System.out.println("Running in Petrol");
}

}

柴油车类

public class DieselCar implements Car{

public void running() {
System.out.println("Running in Diesel");
}

}

抽象混合体

public abstract class Hybrid implements Car{

Car car;

public Hybrid(Car car) {
this.car=car;
}

public void running(){
car.running();
}

abstract void hybridRunning();

}

实现混合类

public class HybridCar extends Hybrid{

public HybridCar(Car car) {
super(car);
}

@Override
void hybridRunning() {
System.out.println("Running in Hybrid Mood");
}

}

在运行时测试,用户可以选择汽车是混合汽油还是混合柴油或汽油还是柴油...

public class App {

public static void main(String[] args) {
String neededType = "Petrol";
boolean hybrid = true;

if (hybrid) {
Hybrid hCar=null;
if (neededType.equalsIgnoreCase("Petrol")) {
hCar=(Hybrid)new HybridCar(new PetrolCar());
} else if (neededType.equalsIgnoreCase("Diesel")) {
hCar=new HybridCar(new DieselCar());
}
hCar.hybridRunning();
hCar.running();
} else {
Car car=null;
if (neededType.equalsIgnoreCase("Petrol")) {
car=new PetrolCar();
} else if (neededType.equalsIgnoreCase("Diesel")) {
car=new DieselCar();
}

}
}
}

这是否正确,是否存在关于 OOP 最佳实践的任何问题

最佳答案

我会使用带有燃料 EnumSet 的单个类。

public interface Car {
static Car create(Fuel fuel, Fuel... others) {
return new CarImpl(EnumSet.of(fuel, others));
}

Set<Fuel> fuels();
void running();

enum Fuel {
Petrol, Diesel, LPG, Hydrogren, Electric
}
}

如果不使用枚举,您将使用不可变类。

public interface Car {
static Car create(Fuel fuel, Fuel... others) {
Set<Fuel> fuels = new HashSet<>();
fuels.add(fuel);
Collections.addAll(fuels, others);
return new CarImpl(fuels);
}

Set<Fuel> fuels();
void running();
void setMode (Fuel fuel) throws IllegalArgumentException;
Fuel getMode ();

class Fuel {
private final String name;
public Fuel(String name) { this.name = name; }
public String name() { return name; }
public String toString() { return name(); }
public int hashCode() { return name().hashCode(); }
public boolean equals(Object o) {
return o instnaceof Fuel && ((Fuel) o).name().equals(name());
}
}
}

关于针对真实场景的 Java 体系结构类设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39642088/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com