在我的Android应用程序中,我有一个类,它给我静态字符串值;像这样的东西:
public class VehicleInfo {
public static String getVehicleEnginePower(boolean isNew) {
return isNew ? "1800CC" : "1600CC";
}
}
现在我有另一个类别,所以我将不得不传递另一个布尔值,我将得到我需要的值。但是,这些类别将继续增加。所以我调查了Open/Closed principle看起来有希望快速增强的内容。为了确保这一点,我将VehicleInfo
类作为接口,然后我将有其他类实现VehicleInfo
。
public interface VehicleInfo {
String getVehicleEnginePower();
}
public class NewVehicle implements VehicleInfo {
@Override
public String getVehicleEnginePower() {
return "1800CC";
}
}
和其他类别类也将是这样的。通过这种方式,我将为所有新类别添加另一个类。
我想问的问题是:有没有办法让我可以拥有这个界面的单个实例?因为在整个应用程序流程中,用户只能在切换到另一个类别之前才能看到一个类别。
我不想在多个点实例化这些类。为了澄清我的问题,我想在申请开始时做这样的事情:
if (isNew) {
VehicleInfo vehicleInfor = new NewVehicle();
}
在整个应用程序中,每当我调用VehicleInfo.getVehicleEnginePower
时,它应始终从NewVehicle类返回引擎功率。
这样的事情可能吗?或者我只是愚蠢而且我必须在多个点上实例化这个界面?
答案 0 :(得分:2)
也许你需要一个单身人士
public class VehicleInfoManager {
private static VehicleInfoManager INSTANCE = new VehicleInfoManager();
private VehicleInfo currentVehicleInfo;
public static VehicleInfoManager getInstance() {
return INSTANCE;
}
public void setCurrentVehicleInfo(VehicleInfo info) {
this.currentVehicleInfo = info;
}
public String getVehicleEnginePower() {
return this.currentVehicleInfo.getVehicleEnginePower();
}
private VehicleInfoManager() {
// Constructor private by default
}
}
然后你可以像这样从任何地方调用它
VehicleInfoManager.getInstance().getVehicleEnginePower()
//Or set current info like this
VehicleInfoManager.getInstance().setCurrentVehicleInfo(new NewVehicle())
请注意,默认情况下currentVehicleInfo为null,因此您需要处理空指针案例。
答案 1 :(得分:1)
如果我理解你的问题。
我的解决方案是Enum
public enum VehicleEnginePower {
NEW ("1800CC"),
OLD ("1600CC"),
private final String name;
private Modes(String s) {
name = s;
}
public String toString() {
return this.name;
}
}
然后你可以
if (isNew) {
String powerOfEngine = VehicleEnginePower.NEW.toString();
}