У меня есть такое требование, что 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
?
Я также хотел бы получить отзыв об этом дизайне, если таковой имеется.
Спасибо