Prototype Pattern

Prototype pattern: als je een hele rij objecten moet cre-eren is het mischien minder resource intensief om een copy van een bestaand object ( prototype ) te maken dan elke keer een nieuw object.

Voor prototype pattern kun je binnen C# een bestaande interface gebruiken: Icloneable

Voorbeeld:

 

 

// Prototype pattern -- Structural example  


using System;

 

namespace DoFactory.GangOfFour.Prototype.Structural

{

  /// 

  /// MainApp startup class for Structural

  /// Prototype Design Pattern.

  /// 

  class MainApp

  {

    /// 

    /// Entry point into console application.

    /// 

    static void Main()

    {

      // Create two instances and clone each

 

      ConcretePrototype1 p1 = new ConcretePrototype1("I");

      ConcretePrototype1 c1 = (ConcretePrototype1)p1.Clone();

      Console.WriteLine("Cloned: {0}", c1.Id);

 

      ConcretePrototype2 p2 = new ConcretePrototype2("II");

      ConcretePrototype2 c2 = (ConcretePrototype2)p2.Clone();

      Console.WriteLine("Cloned: {0}", c2.Id);

 

      // Wait for user

      Console.ReadKey();

    }

  }

 

  /// 

  /// The 'Prototype' abstract class

  /// 

  abstract class Prototype

  {

    private string _id;

 

    // Constructor

    public Prototype(string id)

    {

      this._id = id;

    }

 

    // Gets id

    public string Id

    {

      get { return _id; }

    }

 

    public abstract Prototype Clone();

  }

 

  /// 

  /// A 'ConcretePrototype' class 

  /// 

  class ConcretePrototype1 : Prototype

  {

    // Constructor

    public ConcretePrototype1(string id)

      : base(id)

    {

    }

 

    // Returns a shallow copy

    public override Prototype Clone()

    {

      return (Prototype)this.MemberwiseClone();

    }

  }

 

  /// 

  /// A 'ConcretePrototype' class 

  /// 

  class ConcretePrototype2 : Prototype

  {

    // Constructor

    public ConcretePrototype2(string id)

      : base(id)

    {

    }

 

    // Returns a shallow copy

    public override Prototype Clone()

    {

      return (Prototype)this.MemberwiseClone();

    }

  }

}
 

{{opmerking.Naam}}:

{{opmerking.OpmerkingText}}

            

Saving your comment....

Naam is verplicht!
Email is verplicht!
Opmerking is verplicht!