这种情况有几个选项。
首先,最简单的:
选项 #1 - 卡车/货车接口
如果只有卡车和货车实现选项,则创建一个名为 IVehicleOptions 的接口并让卡车和货车实现它:
public interface VehicleOptions
{
Options { get; }
}
这样做的缺点是,现在您必须以不同于卡车和货车的方式对待汽车。
选项 #2 - 空设计模式
但是,您可以使用Null 设计模式。让 Car 实现 IVehicleOptions,然后返回 null:
public class Car : IVehicleOptions
{
public VehicleOptions { get { return null; } }
}
选项 #3 - 策略模式
创建一个基类,例如 Vehicle:
public abstract class Vehicle
{
public Options Options { get; protected set; }
}
并让每个具体类设置它:
public class Car : Vehicle
{
public Car()
{
this.Options = NullOptions(); // This is the null design pattern used with this strategy pattern
}
}
public class Truck : Vehicle
{
public Truck
{
this.Options = SuperOptions();
}
}
public class Van: Vehicle
{
public Van
{
this.Options = ElegantOptions();
}
}
Now all vehicles can be treated the same way (as a Vehicle).