Одним из самых простых решений для некоторых жестко запрограммированных предопределенных значений экземпляра является factory pattern. Для следующего Car
класса:
public class Car
{
public string Model { get; private set; }
public int Year { get; private set; }
public Color Color { get; private set; }
public int Mileage { get; private set; }
// ...
public Car(string model, int year, Color color, int mileage)
{
Model = model;
Year = year;
Color = color;
Mileage = mileage;
}
}
вы можете создать CarFactory
как предложено Henk Holterman в его comment. Например:
public class CarFactory
{
public CarFactory()
{
random = new Random();
}
public Car CreateBMW99WithRandomMileage(Color color)
{
return new Car("BMW", 1999, color, random.Next());
}
public Car Create03BlackMerc(int mileage)
{
return new Car("Mercedes", 2003, Colors.Black, mileage);
}
public Car Create79Lada(Color color, int mileage)
{
return new Car("Lada", 1979, color, mileage);
}
// ...
private Random random;
}
Как вы можете видеть, у вас есть много возможностей при выборе, какие атрибуты для исправления, которые должны быть случайными, и которые могут быть опущены, как настраивается.
Другое, похоже, образец, который вы можете использовать здесь, это prototype pattern.
Вот как вы можете объединить эти две модели, чтобы создать случайный автомобиль:
public class CarFactory
{
public CarFactory()
{
random = new Random();
black99BMW = new Car("BMW", 1999, Colors.Black, 0);
black03Merc = new Car("Mercedes", 2003, Colors.Black, 0);
black79Lada = new Car("Lada", 1979, Colors.Black, 0);
// ...
allCars = new Car[] { black99BMW, black03Merc, black79Lada };
}
public Car CreateBMW99WithRandomMileage(Color color)
{
return black99BMW.Clone(color, random.Next());
}
public Car Create03BlackMerc(int mileage)
{
return black03Merc.Clone(Colors.Black, random.Next());
}
public Car Create79Lada(Color color, int mileage)
{
return black79Lada.Clone(color, mileage);
}
public Car CreateRandomCar()
{
var index = random.Next(allCars.Length);
Color color = // pick random color
int mileage = random.Next();
return allCars[index].Clone(color, mileage);
}
private Car black99BMW;
private Car black03Merc;
private Car black79Lada;
private Car[] allCars;
}
Возможности бесчисленны - это всего лишь простой пример, и не необходимости установить свой сценарий лучше. Однако, как правило, и особенно для новичков, лучше реализовать что-то, чтобы увидеть, как это работает, увидеть свои преимущества и недостатки своими глазами, а затем попытаться улучшить его.
Вы не «делаете шаблоны в конструкторе», вы пишете класс CarFactory. И, возможно, класс CarTemplate. –