23 Ağu 2015

Prototype Pattern

Author: strongsoul | Filed under: Teknik

Bir prototype pattern aslında kısaca kendisinden klonlanarak türetilen kendisinden bağımsız bir nesne üretilebilmesini sağlar. Örneğin bir listenin sırası değiştirilmiş başka bir örneğini bu şekilde oluşturabilirsiniz.

Nasıl yapıldığına dair örneğimizi yapılandıralım.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace PrototypePattern
{
    class Program
    {
        static void Main(string[] args)
        {
            Agenda agenda1 = new Agenda("Süleyman", "Güngördü");
            Agenda agenda2 = (Agenda)agenda1.Clone();
            
            Console.WriteLine("Agenda1: {0,1}", agenda1.Name + "-" + agenda1.Lastname);
            Console.WriteLine("Cloned: {0,1}", agenda2.Name+"-"+agenda2.Lastname);
            
            agenda2.Name = "Ali";
            Console.WriteLine("-------------------------------------------------");

            Console.WriteLine("Agenda1: {0,1}", agenda1.Name + "-" + agenda1.Lastname);
            Console.WriteLine("Cloned: {0,1}", agenda2.Name + "-" + agenda2.Lastname);
            
            // Wait for user 
            Console.Read();
        }
    }

    abstract class PersonalInformationPrototype
    {
        private string name;
        private string lastname;

        // Constructor 
        public PersonalInformationPrototype(string lName, string lLastname)
        {
            this.name = lName;
            this.lastname = lLastname;
        }

        // Property 
        public string Name
        {
            get { return name; }
            set { name = value; }
        }
        public string Lastname
        {
            get { return lastname; }
        }

        public abstract PersonalInformationPrototype Clone();
    }

    class Agenda : PersonalInformationPrototype
    {
        // Constructor 
        public Agenda(string name, string lastname)
            : base(name,lastname)
        {
        }

        public override PersonalInformationPrototype Clone()
        {
            // Shallow copy 
            return (PersonalInformationPrototype)this.MemberwiseClone();
        }
    }
}

————————————————-
çıktı :
————————————————-

Agenda1: Süleyman-Güngördü
Cloned: Süleyman-Güngördü
————————————————-
Agenda1: Süleyman-Güngördü
Cloned: Ali-Güngördü

creational pattern’lerin sonu…

Yorum Bırakın