Prototype Pattern

New operatörüyle oluşturmanın maliyeti olan ve bu maliyeti azaltmayı amaçlayan tasarım kalıplarından bir tanesidir.

Clone fonksiyonunun özelliği kendi tanımlanmış olduğu tipi geriye döndürmesidir.

namespace ConsoleApp3
 {
    //bu classı implemente eden classlar içerideki metodu uygulamak zorunda olduklarından metot da AventurePrototype'ı döndürmek zorunda olduğundan
    //ki kendi de abstract olduğundan türeyen tip kendi çalışma zamanını geriye döndürmekle yükümlüdür
   abstract class AdventurePrototype 
   {
      public abstract AdventurePrototype Clone();
   }

     //Concrete Prototype
   class Product : AdventurePrototype 
   {       
        public int ProductId { get; set; }
        public string Name { get; set; }
        public decimal ListPrice { get; set; }

        public Product(int productId, string name, decimal listPrice)
        {
          ProductId = productId;
          Name = name;
          ListPrice = listPrice;
        }
 
       public override AdventurePrototype Clone()
       {
        return this.MemberwiseClone() as AdventurePrototype;
       }
   }

   class Program
   {
      static void Main(string[] args)
      {
         Product lcdTv = new Product(1000, "ABC Lcd TV 106", 1000);
        //bunu ürettikten sonra yarın öbürgün bunun seri üretimine geçmek istediğimizi düşünelim.

         Product lcdTV2 = lcdTv.Clone() as Product;

        Console.ReadKey();
      }

    }

}