Самый простой способ - создать базовый класс для разных типов автомобилей.Все ваши конкретные автомобили (Mercedes, BMW) будут происходить из этого.Используя общий базовый класс или интерфейс, ваш класс Customer может работать с определенными автомобилями, не понимая их конкретно.
public abstract class CarBase
{
private string _color;
public virtual void ChangeTires()
{
// do the default change tires
}
public virtual void ChangeColor(string _color)
{
_color = color;
}
}
Затем вы можете создавать автомобили определенных типов:
public class Mercedes : CarBase
{
public override void ChangeColor(string color)
{
}
}
Поскольку каждый метод в CarBase является виртуальным, каждая конкретная реализация может предлагать свою собственную реализацию, если это необходимо, в противном случае она просто полагается на ChangeTires (по умолчанию).
Например, возможно, для Mercedes изменение цвета означает, что вы должны приобрести специальные шины.
public class Mercedes : CarBase
{
public override void ChangeColor(string color)
{
if (color == red)
AddRacingTires();
}
}
Затем вы можете предоставить клиенту метод, который добавляет новое транспортное средство.
public class Customer
{
public Dictionary<string, CarBase> OwnedCars { get; set; }
public void BuyCar(string manufacture)
{
if (manufacture== "Mercedes")
OwnedCars[manufactor] = new Mercedes();
if (manufacture== "BMW")
OwnedCars[manufactor] = new BMW();
}
}
Затем вы можете делать такие вещи, как:
Customer c = new Customer();
c.BuyCar("Mercedes");
c.OwnedCars["Mercedes"].ChangeTires();
Есть лучшие способы управления машинами.Возможно, вы захотите взглянуть на фабрику по производству автомобилей: http://www.dofactory.com/Patterns/PatternFactory.aspx
Возможно, вам также не нужен словарь производителей (я думаю, что вы будете ссылаться на них по VIN или как-то еще).Вам также не нужны волшебные струны, такие как «Мерседес», так как вы можете где-нибудь ввести их неправильно.Но это основной шаблон проектирования, который может работать лучше всего.