C# Прототип (Prototype)

2075 / C# / Шаблони / Прототип (Prototype)

 

Інколи клонувати об'єкт і змінити в ньому один параметр є швидшим, за його створення з нуля

Коли потрібно створювати багато схожих об'єктів, можливо в майбутньому будуть додаватися нові полі

Інтерфейс ICloneable – лише поверхнево копіює об'єкти, треба розписувати вручну

Для дуже складних об'єктів можемо використати копіювання через конструктори чи сериалізацію

 

interface IFigure
{
  IFigure Clone();
  string GetInfo();
}

class Rectangle : IFigure
{
  int width;
  int height;
  public Rectangle(int w, int h)
  {
    width = w;
    height = h;
  }

  public IFigure Clone()
  {
    return new Rectangle(this.width, this.height);
  }
  public string GetInfo()
  {
    return "Rectangle: h=" + height + ", w=" + width;
  }
}

 

static void Main(string[] args)
{
  IFigure figure = new Rectangle(30, 40);
  IFigure clonedFigure = figure.Clone();
  Console.WriteLine(figure.GetInfo());
  Console.WriteLine(clonedFigure.GetInfo());

  Console.ReadKey();
}

Rectangle: h=40, w=30
Rectangle: h=40, w=30