提问人:I Love Stackoverflow 提问时间:6/14/2019 最后编辑:I Love Stackoverflow 更新时间:6/14/2019 访问量:71
在我的设计中对继承与否感到困惑
Confusion regarding having inheritance or not in my design
问:
我有这样的要求,可以.Driver
Mechanic
Start,ApplyBrakes,ChangeGear and Stop the Car
我还有 2 个额外的功能,这是唯一可以且不应该这样做的功能。Mechanic
ChangeOil
AdjustBrakes
Driver
基于此,这是我准备的:
interface IDrivable
{
void Start();
void ApplyBrakes();
void ChangeGear();
void Stop();
}
interface IFixable
{
void ChangeOil();
void AdjustBrakes();
}
public class Car : IDrivable, IFixable
{
public void AdjustBrakes()
{
throw new NotImplementedException();
}
// implement all the methods here
public void ApplyBrakes()
{
throw new NotImplementedException();
}
public void ChangeGear()
{
throw new NotImplementedException();
}
public void ChangeOil()
{
throw new NotImplementedException();
}
public void Start()
{
throw new NotImplementedException();
}
public void Stop()
{
throw new NotImplementedException();
}
}
class Driver
{
private IDrivable car;
public Driver(IDrivable car)
{
this.car = car;
}
public void driveCar()
{
this.car.Start();
this.car.ChangeGear();
this.car.ChangeGear();
}
}
class Mechanic
{
private IDrivable _drivableCar;
private IFixable _fixableCar;
public Mechanic(IDrivable drivableCar, IFixable fixableCar)
{
this._drivableCar = drivableCar;
this._fixableCar = fixableCar;
}
public void driveCar()
{
this._drivableCar.Start();
}
}
class Program
{
static void Main(string[] args)
{
var driver = new Driver(new Car());
driver.driveCar();
var mechanic = new Mechanic(new Car(), new Car());
}
}
我在这里感到困惑,以至于我是否应该添加很少来代表驾驶员和机械师。像这样的东西:abstraction
abstract class User
{
public abstract void DriveCar();
}
class Mechanic : User { }
class Driver : User { }
如果是,那么拥有这个有什么好处,它将如何提供帮助?abstraction
另一个问题是什么时候有这种有意义?abstraction
如果有的话,我也想得到关于这个设计的反馈。
谢谢
答:
0赞
Romain Brisse
6/14/2019
#1
没有抽象的设计是正确的,看起来不错。但是,如果您想添加抽象级别,我不会使用您提供的示例,因为正如您所怀疑的那样,它不会给整体设计带来任何东西。
你可以做的是让 Mechanic 类继承自 Driver 类,因为我认为机械师毕竟必须是驱动程序。这样一来,如果 Driver 类必须更改,则可以简化将来的工作。
上一个:关于继承的一些困惑
下一个:继承总是可以被组合物取代吗?
评论