gpt4 book ai didi

OOP设计问题

转载 作者:行者123 更新时间:2023-12-03 10:50:19 24 4
gpt4 key购买 nike

在这个简单的案例中什么是好的设计:

假设我有一个带有方法的基类 Car FillTank(Fuel fuel)在哪里
燃料也是一个基类,它有几个叶类,柴油,乙醇等。

上我的叶子车类DieselCar.FillTank(Fuel fuel)只有某种类型的燃料
是允许的(这并不奇怪:))。现在这是我关心的问题,根据我的界面,每辆车都可以加任何燃料,但这对我来说似乎是错误的,在每个 FillTank()实现检查输入燃料的类型是否正确,如果没有抛出错误或其他东西。

我怎样才能将这种情况重新设计为更准确的情况,甚至可能吗?
如何设计一个基类作为输入而不得到这些“奇怪结果”的基本方法?

最佳答案

使用通用基类(如果您的语言支持(以下是 C#)):

public abstract class Car<TFuel>  where TFuel : Fuel
{
public abstract void FillTank(TFuel fuel);
}

基本上,这强制任何从 car 继承的类来指定它使用的燃料类型。此外, Car类施加了 TFuel 的限制必须是摘要的某个子类型 Fuel类(class)。

假设我们有一些类(class) Diesel这很简单:
public class Diesel : Fuel
{
...
}

还有一辆只使用柴油的汽车:
public DieselCar : Car<Diesel>
{
public override void FillTank(Diesel fuel)
{
//perform diesel fuel logic here.
}
}

关于OOP设计问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2289049/

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