gpt4 book ai didi

Java 接口(interface) : Calling an implementation class based on object types

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

我有一个接口(interface)及其 2 个实现说:

public interface ObjectProcessor {
public void process(List<String> objectNames);
}

public CarImpl implements ObjectProcessor {
@override
public void process(List<String> carNames){
//car logic
} }

public VanImpl implements ObjectProcessor {
@override
public void process(List<String> vanNames){
//van logic
}
}

现在使用这个接口(interface)的调用者看起来像:

public void caller(VehicleType vehicleType, List<String> vehicleNames ) {
ObjectProcessor processor = null ;
if (VehicleType == VehicleType.CAR) {
processor = new CarImpl();
processor.process(vehicleNames);
}
}

VehicleType 是一个 ENUM这很好用。但是无论如何我可以在没有
的情况下动态调用接口(interface)吗?添加 if 语句。将来如果我要支持另一种车辆,我需要添加一个 if 语句以及接口(interface)的新实现。我怎样才能避免这种情况?

最佳答案

像这样在枚举中覆盖抽象工厂方法。

public enum VehicleType {
Car {
@Override
public ObjectProcessor createImpl() {
return new CarImpl();
}
},
Van {
@Override
public ObjectProcessor createImpl() {
return new VanImpl();
}
};
public abstract ObjectProcessor createImpl();
}

public void caller(VehicleType vehicleType, List<String> vehicleNames ) {
ObjectProcessor processor = vehicleType.createImpl();
processor.process(vehicleNames);
}

VechicleType 结合了枚举和工厂。

或者您可以像这样在枚举中编写所有逻辑。

public enum VehicleType {
Car {
@Override
public ObjectProcessor createImpl() {
return new ObjectProcessor() {

@Override
public void process(List<String> objectNames) {
// car logic
}

};
}
},
Van {
@Override
public ObjectProcessor createImpl() {
return new ObjectProcessor() {

@Override
public void process(List<String> objectNames) {
// van logic
}

};
}
};
public abstract ObjectProcessor createImpl();
}

在这种情况下,您不再需要实现类(CarImpl、VanImpl 等)。

关于Java 接口(interface) : Calling an implementation class based on object types,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34349425/

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