gpt4 book ai didi

oop - 来自采访的车辆配置信息亭的面向对象设计

转载 作者:行者123 更新时间:2023-12-05 00:34:44 24 4
gpt4 key购买 nike

我有一个面试问题,询问我将如何设计一个系统来在售货亭展示汽车/卡车/货车,以便客户可以查看车辆的规范。 (警告:我最近没有做太多的 OO 编程,所以可能会出现不好的词汇)

我说我是从一类具有非常基本属性的车辆开始的,比如轴距、传动系统、马力。然后我会将其分割为汽车、卡车或货车,在那里我可以进行更具体的测量,例如卡车的床长或汽车的后备箱容量。

然后他们问,我将如何添加选项。我说选项可能存在于任何车辆上,所以我会说车辆可以有一个选项列表。

最后他们问,如果有一个选项只适用于卡车和货车而不是汽车,我有点难过。鉴于我描述的布局,有什么方法可以很好地实现这一点吗?有没有更好的方法来设置类层次结构来解决这个问题?或者这只是一个更复杂的问题,如果不添加一些额外的逻辑就无法轻松解决?

最佳答案

这种情况有几个选项。

首先,最简单的:

选项 #1 - 卡车/货车接口(interface)

如果只有卡车和货车实现选项,则创建一个名为 IVehicleOptions 的接口(interface)并让卡车和货车实现它:

public interface VehicleOptions
{
Options { get; }
}

这样做的缺点是,现在您必须以不同于卡车和货车的方式对待汽车。

选项 #2 - 空设计模式

但是,您可以使用 空设计模式 .让 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();
}
}

现在所有车辆都可以以相同的方式处理(作为车辆)。

关于oop - 来自采访的车辆配置信息亭的面向对象设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10341885/

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