2016-06-03 5 views
0

У меня есть вопрос относительно шаблона прототипа.Понимание шаблона прототипа

Я прочитал, что Prototype Pattern эффективен, поскольку он копирует объект вместо создания нового, что считается дорогостоящей операцией.

Итак, основываясь на этом, я попробовал образец и вижу различные результаты. Я правильно проверяю его Или я пропустил что-нибудь?

static void Main(string[] args) 
    { 
     var sw = new Stopwatch(); 
     sw.Start(); 
     Employee e; 
     for (var i = 0; i < 100000; i++) 
     { 
      e = new Employee(5, "sandesh", 27, "Bengaluru"); 
      e.Print(); 
     } 
     sw.Stop(); 
     Console.WriteLine("New : " + sw.ElapsedMilliseconds); 

     sw.Reset(); 
     sw.Start(); 
     e = new Employee(5, "sandesh", 27, "Bengaluru"); 
     for (var i = 0; i < 100000; i++) 
     { 
      var en = e.Clone(); 
      en.Print(); 
     } 
     sw.Stop(); 
     Console.WriteLine("Clone : " + sw.ElapsedMilliseconds); 

     Console.ReadLine(); 
    } 


public class Employee 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public int Age { get; set; } 
    public string Place { get; set; } 

    public Employee(int id, string name, int age, string place) 
    { 
     Id = id; 
     Name = name; 
     Age = age; 
     Place = place; 
    } 


    public Employee Clone() 
    { 
     return (Employee)this.MemberwiseClone(); 
    } 

    public void Print() 
    { 
     var sum = Id * Age; 
     var full = sum + Name + Place; 
    } 
} 

И результаты приведены ниже: первый запуск: - Новое: 18 Клон: 26

второй Run: - Новое: 34 Клон: 30

третий Пробег: - Новое: 20 Клон: 33

Цените, если вы можете помочь мне в понимании этого шаблона. И что еще нужно сделать для создания нового объекта, чего не происходит при клонировании?

+0

Вы знаете разницу между «эффективными» и «эффективными»? Узнайте, что прочитанная вами статья означает «эффективный». Всякий раз, когда вы говорите «я читаю», расскажите нам, где вы его читаете. Тогда кто-то может проверить, вы просто неправильно поняли, или статья была написана невежественным блоггером, или она исходит из надежного источника. – gnasher729

+0

Я думаю, что в целом шаблоны Prototype работают лучше, поскольку не создают объекты. В моем примере это не так. Я на правильном пути? Или есть что-нибудь, что вы можете предложить ?. А также любой пример кода, в котором я могу увидеть преимущества, будет полезен. Я прочитал так много статей, и я не уверен, могу ли я найти эту статью в частности. Но все же я чувствую вопрос в ответном состоянии :) –

ответ

3

Похоже, что вы ищете метрику, которая может использоваться для измерения создания объекта по сравнению с клонированием объекта. В вашем примере вы создаете объекты, используя разностные механизмы и ищете разницу в метрике.

Что должен сделать шаблон прототипа, это сокращение времени создания объекта, а не механики компилятора и байтового кода, а скорее , избегая трудоемких операций, которые обычно выполняются.

Например, если ваш объект Employee потребовал, чтобы вызов базы данных был создан правильно, шаблон Prototype можно использовать, чтобы избежать этого вызова. Вы все равно будете создавать объекты и значения параметров, как продемонстрировал ваш код, но логическая инициализация вашего объекта, реальных данных, будет короткой. Здесь происходит экономия времени.

+0

Ах! Я пропустил понимание самой важной части - объектов реального времени. Спасибо, что указали это. –

Смежные вопросы