22 Ağu 2015

Builder Pattern

Author: strongsoul | Filed under: Teknik

BuilderPattern sıklıkla kompleks tipte objelerin inşasında kullanılır.

Şimdi adım adım gidelim,
yapılandırmada üretimi gerçekleştireceğimiz işin ana yapısını belirten bir interface’imiz vardır.

BuilderPattern – interface InsaSinifi

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

namespace BuilderPattern
{
    public interface InsaSinifi
    {
        void paketle();
        void adetFiyati();
        Urun getUrun();
    }
}

ve bir adet URUN classımız vardır ki bu bizim üreteceğimiz üründür aslında.

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

namespace BuilderPattern
{
    public class Urun
    {
        public string adi { get; set; }
        public long adet { get; set; }
        public long fiyat { get; set; }
        public string ucretTuru { get; set; }

        public override string ToString()
        {
            return String.Format("urun {0}, adedi {1} fiyatı {2} ucretturu {3}",adi,adet,fiyat,ucretTuru);
        }
    }
}

 

üretimini gerçekleştireceğimiz ürünü interface den türeteriz ki yapim şekli istediğimiz şekilde gitsin.

PortakalsuyuIretim: InsaSinifi, KusSutuUretim : InsaSinifi

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

namespace BuilderPattern
{
    class Portakalsuyuuretim : InsaSinifi
    {
        private Urun urun = new Urun();
        public void adetFiyati()
        {
            urun.fiyat = 32;
            urun.ucretTuru = "Türk Lirası";
        }

        public void paketle()
        {
            urun.adet = 12;
            urun.adi = "Portakal Suyu";
        }

        public Urun getUrun()
        {
            return urun;
        }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace BuilderPattern
{
    class KusSutuUretim : InsaSinifi
    {
        private Urun urun = new Urun();
        public void adetFiyati()
        {
            urun.fiyat = 32;
            urun.ucretTuru = "dolar";
        }

        public void paketle()
        {
            urun.adet = 1;
            urun.adi = "Kuş Sütü";
        }

        public Urun getUrun()
        {
            return urun;
        }
    }
}

daha sonra bu üretimini yapısal olarak ortaya koyduğumuz, yeni classları çalıştıracak, bizi bu üretim standlarından soyutlayarak sadece istediğimizi dinamik olarak elde etmemizi sağlayacak,(portakal suyu istiyorsak portakal suyu, kuş sütü istiyorsa kuş sütü) aşağıdaki classı yapılandırırız

UrunUret

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

namespace BuilderPattern
{
    class UrunUret
    {
        InsaSinifi insaSinifi;

        public void SetUrunInsaSinifi(InsaSinifi iInsaSinifi)
        {
            insaSinifi = iInsaSinifi;
        }

        public Urun GetUrun()
        {
            return insaSinifi.getUrun();
        }

        public void urunUret()
        {
            insaSinifi.paketle();
            insaSinifi.adetFiyati();
        }

    }
}

şimdi ne istiyorsak onu alabiliriz.
Program

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

namespace BuilderPattern
{
    class Program
    {
        static void Main(string[] args)
        {
            UrunUret urunUret = new UrunUret();
            urunUret.SetUrunInsaSinifi(new Portakalsuyuuretim());
            urunUret.urunUret();
            Urun urunPortakalSuyu = urunUret.GetUrun();
            Console.WriteLine(urunPortakalSuyu);

            urunUret.SetUrunInsaSinifi(new KusSutuUretim());
            urunUret.urunUret();
            Urun kusSutu = urunUret.GetUrun();
            Console.WriteLine(kusSutu);
        }
    }
}

ve çıktımız şu şekilde :

urun Portakal Suyu, adedi 12 fiyatı 32 ucretturu Türk Lirası
urun Kuş Sütü, adedi 1 fiyatı 32 ucretturu dolar
Press any key to continue . . .

kısa ve öz tasarım kalıplarımızda tekrar görüşmek üzere 🙂

Yorum Bırakın