我这样要求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 :(得分:0)
您的没有抽象的设计是正确的,看起来不错。但是,如果您要添加抽象级别,则我不会使用您提供的示例,因为您怀疑,它不会给整体设计带来任何好处。
您可以做的是使Mechanic类继承自Driver类,因为我认为毕竟机械必须是驾驶员。这样,如果必须更改Driver类,则可以简化以后的工作。