2016-06-03 10 views
0

Ich habe eine Frage zu Prototype Pattern.Understanding Prototype Pattern

Ich lese, dass Prototyp Muster wirksam ist, wie es das Objekt kopiert, anstatt eine neue zu erstellen, die als eine teure Operation betrachtet wird.

Also basierend auf diesem habe ich eine Probe versucht und ich sehe abwechslungsreiche Ergebnisse. überprüfe ich es auf die richtige Weise Oder habe ich etwas verpasst?

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; 
    } 
} 

Und die Ergebnisse sind unten: 1. Run: - Neu: 18 Klon: 26

2. Run: - Neu: 34 Klon: 30

3. Run: - Neu: 20 Klon: 33

Schätzen Sie, wenn Sie mir helfen können, dieses Muster zu verstehen. Auch was braucht es, um ein neues Objekt zu erstellen, was beim Klonen nicht passiert?

+0

Sie kennen den Unterschied zwischen "effektiv" und "effizient"? Finden Sie heraus, was der Artikel, den Sie lesen, bedeutet "effektiv". Wann immer Sie "Ich lese" sagen, sagen Sie uns, wo Sie es lesen. Dann kann jemand überprüfen, ob Sie gerade falsch verstanden haben, oder der Artikel wurde von einem ahnungslosen Blogger geschrieben, oder ob es aus einer zuverlässigen Quelle stammt. – gnasher729

+0

Ich denke im Allgemeinen Prototyp Muster funktioniert besser, da es keine Objekte erstellt. Was in meinem Beispiel nicht der Fall ist. Bin ich auf dem richtigen Weg? Oder gibt es etwas, was Sie vorschlagen können ?. Und auch jeder Beispielcode, bei dem ich die Vorteile sehen kann, wird hilfreich sein. Ich habe so viele Artikel gelesen und bin mir nicht sicher, ob ich diesen Artikel besonders finden kann. Aber immer noch fühle ich die Frage in beantwortbar :) –

Antwort

3

Es scheint, dass Sie nach einer Metrik suchen, mit der die Erstellung eines Objekts und das Klonen eines Objekts gemessen werden können. In Ihrer Stichprobe erstellen Sie Objekte über Differenzmechanismen und suchen nach einem Unterschied in einer Metrik. Das Prototyp-Muster beabsichtigt, die Erstellungszeit eines Objekts zu reduzieren, nicht durch die Mechanik des Compilers und des Byte-Codes, sondern durch unter Vermeidung von zeitaufwendigen Operationen, die normalerweise ausgeführt werden würden.

Wenn beispielsweise Ihr Objekt Employee einen Datenbankaufruf benötigt, um ordnungsgemäß instanziiert zu werden, kann das Muster Prototyp verwendet werden, um diesen Aufruf zu vermeiden. Sie würden immer noch Objekte und Einstellungswerte erstellen, wie Ihr Code gezeigt hat, aber die logische Initialisierung Ihres Objekts, die echten Daten, wäre kurzgeschlossen. Hier kommt die Zeitersparnis ins Spiel.

+0

Ah! Ich habe es versäumt, den wichtigsten Teil zu verstehen - Objekte in Echtzeit. Danke, dass du es aufgezeigt hast. –