[英]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
來表示 Driver 和 Mechanic 。像這樣:
abstract class User
{
public abstract void DriveCar();
}
class Mechanic : User { }
class Driver : User { }
如果是,那么擁有這種abstraction
有什么好處,它會有什么幫助?
另一個問題是什么時候有這種abstraction
有意義?
如果有的話,我也想得到關於這個設計的反饋。
謝謝
你沒有抽象的設計是正確的,看起來不錯。 但是,如果您想添加抽象級別,我不會使用您提供的示例,因為正如您所懷疑的那樣,它不會給整體設計帶來任何影響。
你可以做的是讓 Mechanic 類從 Driver 類繼承,因為我認為畢竟機械師必須是司機。 這樣做,如果 Driver 類必然會發生變化,您將簡化未來的工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.