Sayfalar

10 Şubat 2015 Salı

Tasarım Desenleri

Tasarım Desenlerine Giriş-1 (AbstractFactory)

Nesne yönelimli proglamlama yaparken bir takım desenleri bilmemiz bizim uygun modellemeyi yapabilmemizi hızlandıracaktır. Bu blogta bir takım problemlere çözümler getiren modelleri paylaşacağım. Uluslar arası kabul görmüş bu yapılarla nesne yönelimli programlama tekniğinizi geliştirebilirsiniz.

AbstractFactory
Bu tasarım deseninde bir sınıf oluşturulmadan önce aldığı parametre ile istenen işlemleri yapacak sınıfların oluşturulması ve bu sayede çalıştırılacak olan methodların yapılacak işe göre şekillenmesi sağlanmış olur. Örneğin müşterinin bizden istediği ürüne göre (constructure parametresi) bizim cihaz üretmemizi düşünelim. Öncelikle bu cihazı üretecek aletleri temin ederiz (nesneleri oluştururuz.) . Daha sonra işlemleri yaparız( methodları çağırırız). Örnek vererek konu daha net anlaşılacaktır. Bir fabrikada opel astra ve opel vectra yapıldığını düşünelim. Fakat bu fabrikada opel astranında farklı modelleri  yapılabilmekte o zaman fabrikayı özelleştirmemiz gerekiyor. Fabrikadan miras alıp nihayi ürünü çıkaracak ufak atölyeler yapmamız gerekiyor. Sonuçta bu atölyeden farklı model arabalar çıkacaktır. Opel astra 2001 veya 2005 gibi.

        class MainProgram
    {

        public static void Main()
        {
           
            OpelFabrikasi factory1 = new Model2001Atolyesi();
            Araba client1 = new Araba(factory1);
            client1.Run();
        
            OpelFabrikasi factory2 = new Model2005Atolyesi();
            Araba client2 = new Araba(factory2);
            client2.Run();

            Console.ReadKey();
        }
    }
    abstract class OpelFabrikasi
    {
        public abstract OpelAstra OpelAstraUret();
        public abstract OpelVectra OpelVectraUret();
    }
    class Model2001Atolyesi : OpelFabrikasi
    {
        public override OpelAstra OpelAstraUret()
        {
            return new OpelAstra2001();
        }
        public override OpelVectra OpelVectraUret()
        {
            return new OpelVectra2001();
        }
    }
    class Model2005Atolyesi : OpelFabrikasi
    {
        public override OpelAstra OpelAstraUret()
        {
            return new OpelAstra2005();
        }
        public override OpelVectra OpelVectraUret()
        {
            return new OpelVectra2005();
        }
    }
    abstract class OpelAstra
    {
    }

    abstract class OpelVectra
    {
        public abstract void Interact(OpelAstra a);
    }

    class OpelAstra2001 : OpelAstra
    {

    }
    class OpelVectra2001 : OpelVectra
    {
        public override void Interact(OpelAstra a)
        {
            Console.WriteLine(this.GetType().Name +
              "==> " + a.GetType().Name);
        }
    }

    class OpelAstra2005 : OpelAstra
    {
    }

    class OpelVectra2005 : OpelVectra
    {
        public override void Interact(OpelAstra a)
        {
            Console.WriteLine(this.GetType().Name +
              " ==> " + a.GetType().Name);
        }
    }

    class Araba
    {
        private OpelAstra opelAstra;
        private OpelVectra opelVectra;

        public Araba(OpelFabrikasi factory)
        {
            opelVectra = factory.OpelVectraUret();
            opelAstra = factory.OpelAstraUret();
        }

        public void Run()
        {
            opelVectra.Interact(opelAstra);
        }
    }

Hiç yorum yok:

Yorum Gönder