#design-pattern etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
#design-pattern etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

3 Eylül 2023 Pazar

Abstract Factory Design Pattern Nedir?

 

Abstract factory design pattern nedir?

Merhabalar, bu yazımızda Abstract Factory Design Pattern ile ilgili örnek bir proje gerçekleştireceğiz.Önceki yazımızda Factory Design Method Pattern ile ilgili örnek bir proje yapmıştık. Peki Factory Design Method ile Abstract Factory Design arasındaki fark nedir ? Sorusuna cevap vermeye çalışalım.

Factory Method’ta ilişkisel olan birden fazla nesnenin üretimini ortak bir arayüz aracılığı ile tek bir sınıf üzeriden oluşturur.Nesne üretimi esnasında istemcinin üretilen nesneye olan bağımlılığını ortadan kaldırmayı hedefler.

Abstract Factory ise ilişkisel olan birden fazla nesnenin üretimini tek bir arayüz üzerinden değil de her ürün grubu için farklı bir arayüz tanımlayarak sağlamaktadır.Yani birden fazla ürün grubu ile çalışacaksak bunları istemciden bu yöntemle soyutlayarak nesneler üretilir.

Şimdi örnek projeye başlayalım.Öncelikle interface tanımlarını yapalım. 

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
    /// <summary>
    /// Araba nesnelerimin türetildiği base interface
    /// </summary>
    public interface IAraba
    {
        /// <summary>
        /// Arabanın adını getiren method
        /// </summary>
        /// <returns></returns>
        string GetArabaModeli();
    }

    /// <summary>
    /// Jant Nesnelerimin türetileceği base interface
    /// </summary>
    public interface IJant
    {
        /// <summary>
        /// Jantın çapını getiren method
        /// </summary>
        /// <returns></returns>
        int GetJantCapi();
    }
    
    /// <summary>
    /// Marka oluşturan base interface
    /// </summary>
    public interface IMarkaFactory
    {
        /// <summary>
        /// Araba Nesnesini oluşturan method
        /// </summary>
        /// <returns></returns>
        IAraba ArabaOlustur();

        /// <summary>
        /// Jant nesnesini oluşturan method
        /// </summary>
        /// <returns></returns>
        IJant JantOlustur();
    }

 

 Yine araba markaları üzerinden anlatım yapacağım.Şimdi de arabaların modellerini oluşturuyorum.

 

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
    /// <summary>
    /// BMW nesnesi IAraba interfaceden türettim
    /// </summary>
    public class Bmw : IAraba
    {
        /// <summary>
        /// Araba modelini getirir
        /// </summary>
        /// <returns></returns>
        public string GetArabaModeli()
        {
            return "7.40";
        }
    }
    
    /// <summary>
    /// Mercedes nesnesi IAraba interfaceden türettim
    /// </summary>
    public class Mercedes : IAraba
    {
        /// <summary>
        /// Araba Modelini getirir.
        /// </summary>
        /// <returns></returns>
        public string GetArabaModeli()
        {
            return "CLA 350";
        }
    }
    
    /// <summary>
    /// OPEL nesnesi IAraba interfaceden türettim
    /// </summary>
    public class Opel : IAraba
    {
        /// <summary>
        /// Araba Modelini getirir.
        /// </summary>
        /// <returns></returns>
        public string GetArabaModeli()
        {
            return "Insignia";
        }
    }

 

 Şimdide araba modellerinde bulunacak olan jantları oluşturacağım.

 

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
    /// <summary>
    /// Bmw jantının nesnesini Ijant interfaceden türetiyorum
    /// </summary>
    public class BmwJant : IJant
    {
        /// <summary>
        /// Jant çapını getiren method
        /// </summary>
        /// <returns></returns>
        public int GetJantCapi()
        {
            return 19;
        }
    }
    
    /// <summary>
    /// Jant nesnesini Ijant interfaceden türetiyorum
    /// </summary>
    public class MercedesJant : IJant
    {
        /// <summary>
        /// Janbt çapını getiren method
        /// </summary>
        /// <returns></returns>
        public int GetJantCapi()
        {
            return 18;
        }
    }
    
    
    /// <summary>
    /// Opel Jantlarını Ijant interfaceden türetiyorum
    /// </summary>
    public class OpelJant : IJant
    {
        /// <summary>
        ///JAnt çapını getiren method
        /// </summary>
        /// <returns></returns>
        public int GetJantCapi()
        {
           return 17;
        }
    }

 

Şimdide araba nesnesini oluşturacak factory classları yazıyoruz.Bu kısımda IMarkaFactory interface’inde yaptığımız tanımlamalara göre bize araba ve jant nesnesinden oluşan bir marka objesi üretme işlemi gerçekleştireceğiz. Aşağıdaki kodlara bakıldığında daha iyi anlaşılacaktır.

 

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
    /// <summary>
    /// BmwFactory Bmw fabrikası gibi düşünebirlirsiniz.
    /// IMarkaFactory interfaceden Bir tane araba 
    /// ve jant oluşturan methodlarla araba ve jant oluşturuyoruz.
    /// </summary>
    public class BmwFactory : IMarkaFactory
    {
        public IAraba ArabaOlustur()
        {
            return new Bmw();
        }

        public IJant JantOlustur()
        {
            return new BmwJant();
        }
    }
    
    /// <summary>
    /// MercedesFactory Mercedes fabrikası gibi düşünebirlirsiniz.
    /// IMarkaFactory interfaceden Bir tane araba ve jant oluşturan
    /// methodlarla araba ve jant oluşturuyoruz.
    /// </summary>
    public class MercedesFactory : IMarkaFactory
    {
        public IAraba ArabaOlustur()
        {
            return new Mercedes();
        }

        public IJant JantOlustur()
        {
            return new MercedesJant();
        }
    }
    
    
    /// <summary>
    /// OpelFactory Opel fabrikası gibi düşünebirlirsiniz.
    /// IMarkaFactory interfaceden Bir tane araba ve jant
    /// oluşturan methodlarla araba ve jant oluşturuyoruz.
    /// </summary>
    public class OpelFactory : IMarkaFactory
    {
        public IAraba ArabaOlustur()
        {
            return new Opel();
        }

        public IJant JantOlustur()
        {
            return new OpelJant();
        }
    }

İnterface ve class tanımlamalarımız buraya kadardı.Biz şimdi burada ne yaptık ? IAraba ve IJant interface yasesinde istediğimiz kadar farklı jant ve araba tipi üretebiliriz. IMarkaFactory interface’i sayesinde istediğimiz kombinasyonlarda marka üretebiliriz. ImarkaFactory interface’i sayesinde Bmw, Mercedes, Opel markalarını üretebiliyorum.

Ama bu üretim için DunyaMarkalari class’ını kullanıyoruz. İstediğim markanın özelliklerine göre markayı üretip objeyi geri dönüyor bize.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
    /// <summary>
    /// Clientların marka,araba ve jant oluşturmak istediklerinde bu objeyi kullanacaklar
    /// </summary>
    public class DunyaMarkalari
    {
        /// <summary>
        /// oluşturulacak arabayı tuttuğumuz değişken
        /// </summary>
        private readonly IAraba _araba;

        /// <summary>
        /// Oluşturulacak jantı tuttuğumuz değişken
        /// </summary>
        private readonly IJant _jant;

        /// <summary>
        /// Nesneye constructor da hangi markayı verirsem o markanın objesini oluşturur.
        /// </summary>
        /// <param name="markaFactory"></param>
        public DunyaMarkalari(IMarkaFactory markaFactory)
        {
            _araba = markaFactory.ArabaOlustur();
            _jant = markaFactory.JantOlustur();
        }

        /// <summary>
        /// Oluşturulan arabanın modelini getirir. 
        /// </summary>
        /// <returns></returns>
        public string ArabaModeli()
        {
            return _araba.GetArabaModeli();
        }

        /// <summary>
        /// Oluşturulan jantın çapını getirir. 
        /// </summary>
        /// <returns></returns>
        public int JantCapi()
        {
            return _jant.GetJantCapi();
        }
    }

 Şimdi örneğimizdeki 3 farklı markayı üretip özelliklerine bakalım.

 

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
            BmwFactory bmwFactory = new BmwFactory();
            OpelFactory opelFactory = new OpelFactory();
            MercedesFactory mercedesFactory = new MercedesFactory();

            DunyaMarkalari dunyaMarkalari = new DunyaMarkalari(bmwFactory);
            Console.WriteLine(String.Format("Araba Modeli:{0}, Jant Çapı:{1}", dunyaMarkalari.ArabaModeli(), dunyaMarkalari.JantCapi()));

            Console.WriteLine(Environment.NewLine);

            DunyaMarkalari dunyaMarkalari2 = new DunyaMarkalari(opelFactory);
            Console.WriteLine(String.Format("Araba Modeli:{0}, Jant Çapı:{1}", dunyaMarkalari2.ArabaModeli(), dunyaMarkalari2.JantCapi()));

            Console.WriteLine(Environment.NewLine);

            DunyaMarkalari dunyaMarkalari3 = new DunyaMarkalari(mercedesFactory);
            Console.WriteLine(String.Format("Araba Modeli:{0}, Jant Çapı:{1}", dunyaMarkalari3.ArabaModeli(), dunyaMarkalari3.JantCapi()));

 

 


 

 Umarım faydalı olmuştur.Kaynak kodları github’a koydum oradan bakıp inceleyebilirsiniz.Esen kalın.

Yararlandığım Kaynaklar

Kaynak Kodu 

https://medium.com/@hakantopuz/abstract-factory-design-pattern-nedir-ne-zaman-ve-nas%C4%B1l-kullan%C4%B1l%C4%B1r-25dea188477c

https://www.gencayyildiz.com/blog/c-abstract-factory-design-patternabstract-factory-tasarim-deseni/ 

Factory Method Design Pattern Nedir ?

 

Factory method design pattern nedir ?

Merhabalar, bu yazımızda Factory Method Design Pattern ile ilgili bir örnek proje gerçekleştireceğiz. Bu tasarım kalıbıyla yapılmak istenen amaç, oluşturmak istediğimiz sınıfın kendisinden bir örnek istemek yerine Factory Method Pattern'i sayesinde tek bir instance üzerinden gerekli nesnenin üretilmesini sağlamaktır.

Uygulamamızda belirli adımlarda farklı tiplerde nesnelere ihtiyacımız olabilir. Bu nesneleri if - else veyahut switch yapıları aracılığıyla, duruma göre oluşturabiliriz. Tabi bunu her seferinde yapmanın zaman ve kod açısından çok tasarruflu olduğunu düşünülemez. İşte böyle durumlarda Factory Method Pattern'ini kullanabiliriz.

Bir başka deyişle, elinizin altındaki birden çok ilişkisel sınıftan nesne üreteceksek, söz gelimi her defasında ilgili nesneye özel üretme gramerini uygulamanıza gerek kalmayacak, tek bir sınıf üzerinden oluşturacağımız nesne talebiyle istediğiniz nesneyi elde edebileceğiz.

Şimdilik şöyle bir örnek üzerinden gidelim.Bir galeri düşünelim Bmw, Opel, Mercedes markalarını satıyor. Factory Method Pattern'i ile istediğimiz araba nesnesini üretelim.

Abstract Class İle Factory Method Design Pattern

Kurgulanan senaryoya göre tüm arabalarin türetilecek abstract class’ı dizayn edelim.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
using System;
using System.Collections.Generic;
using System.Text;

namespace FactoryMethodDesign.AbstractClass
{
    /// <summary>
    /// Soyutlanacak base class abstract kelimesi ile belirtilir
    /// </summary>
   abstract class ArabaMarkasi
    {
        /// <summary>
        /// MarkaAdi methodu abstract kelimesi ile işaretlenerek ArabaMarkasi clasından kalıtılan
        /// classta bu method override edilmek zorunda. Oyuzden gövdesi burada doldurulmaz.
        /// </summary>
        public abstract void MarkaAdi();
    }
}

 

Şimdide arabalarımızı tasarlayalım ve oluşturmuş olduğumuz “ ArabaMarkasi ” abstract class’ından bu ürünleri türetelim.

Bmw:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
using System;
using System.Collections.Generic;
using System.Text;

namespace FactoryMethodDesign.AbstractClass
{
    /// <summary>
    /// Bmw class'ını soyutlanmış ArabaMarkasi class'ından türetiyorum.
    /// Ve ArabaMarkasi class'ındaki abstract olarak tanımlanmış methodu override ederek methodun body'sini dolduruyorum
    /// </summary>
    class Bmw : ArabaMarkasi
    {
        /// <summary>
        /// ArabaMarkasi class'ından iplement'e edilen ve override edilen method
        /// </summary>
        public override void MarkaAdi()
        {
            Console.WriteLine("Bu araba abstarc'tan Oluşturuldu ve Bmw dir.");
        }
    }
}


Mercedes:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
using System;
using System.Collections.Generic;
using System.Text;

namespace FactoryMethodDesign.AbstractClass
{
    /// <summary>
    /// Mercedes clasını soyutlanmış ArabaMarkasi clasından türetiyorum.
    /// Ve ArabaMarkasi klasındaki abstract olarak tanımlanmış methodu override ederek, methodun body sini dolduruyorum
    /// </summary>
    class Mercedes : ArabaMarkasi
    {
        /// <summary>
        /// ArabaMarkasi clasından iplemente edilen ve override edilen method
        /// </summary>
        public override void MarkaAdi()
        {
            Console.WriteLine("Bu araba Abstarctan Oluşturuldu ve Markası Mercedes tir.");
        }
    }
}

 

Opel:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
using System;
using System.Collections.Generic;
using System.Text;

namespace FactoryMethodDesign.AbstractClass
{
    /// <summary>
    /// Opel platformunun clasını soyutlanmış ArabaMarkasi clasından türetiyorum.
    /// Ve ArabaMarkasi klasındaki abstract olarak tanımlanmış methodu override ederek, methodun body sini dolduruyorum
    /// </summary>
    class Opel : ArabaMarkasi
    {
        /// <summary>
        /// ArabaMarkasi clasından iplemente edilen ve override edilen method
        /// </summary>
        public override void MarkaAdi()
        {
            Console.WriteLine("Bu araba Abstarctan Oluşturuldu ve Markası Opel dir.");
        }

    }
}

 

Araba ürünlerimi Abstract class olan ArabaMarkasi sınıfından türeterek sınıflarımı oluşturdum. Artık bu sınıflardan nesne üretecek olan Creater sınıfını oluşturalım ve içerisine Factory işlemini yapacak metodumuzu tanımlayalım.

Ama öncelikle bu method hangi tipten nesne üreteceğini nerden bilecek? Bu durumu Enumaration ile halledebiliriz. Aşağıdaki Enumaration FactoryMethod’un hangi tipte nesne üreteceğine yardımcı olacaktır.

Araba Çeşitleri:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
using System;
using System.Collections.Generic;
using System.Text;

namespace FactoryMethodDesign.AbstractClass
{
    enum Markalar
    {
        Bmw,
        Opel,
        Mercedes
    }
}

 

 Bu işlemden sonra FactoryMethod’u tam olarak inşa edebiliriz.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
using System;
using System.Collections.Generic;
using System.Text;

namespace FactoryMethodDesign.AbstractClass
{
    /// <summary>
    /// Creator clasımız objelerin oluşturulmasından sorumlu obje
    /// </summary>
    class Creator
    {
        /// <summary>
        /// ArabaMarkasi tipinde obje oluşturan factory method 
        /// </summary>
        /// <param name="oyunTipi"></param>
        /// <returns></returns>
        public ArabaMarkasi FactoryMethod(Markalar arabaMarkasi)
        {
            ArabaMarkasi araba = null;
            switch (arabaMarkasi)
            {
                case Markalar.Bmw:
                    araba = new Bmw();
                    break;
                case Markalar.Opel:
                    araba = new Opel();
                    break;
                case Markalar.Mercedes:
                    araba = new Mercedes();
                    break;
                default:
                    break;
            }
            return araba;
        }
    }
}

 

Gördüğünüz gibi FactoryMethod parametresinde belirttiğimiz tipe göre istediğimiz nesneyi oluşturacak bir işleyişe sahip oldu. Burada dikkat etmeniz gereken husus, her bir araba ürününün “ArabaMarkasi” abstract class’ından kalıtım almasından dolayı çok biçimlilik kullanılarak “ArabaMarkasi” referansında tutulabilmekte ve geriye döndürülebilmektedir. Sıra geldi istediğimiz nesneyi üretmeye…

Ekran görüntüsü aşağıdaki gibi oluyor.

 

Tabi ilişkisel sınıflar ve algoritmada ki ihtiyaca göre üretilmesi gereken sınıflar üzerinde bu tasarım desenini uygulamak en doğrusudur.

Eğer Factory Method tasarım desenenini interface kullanarak uygulamak istiyorsanız, “ArabaMarkasi” isimli abstract sınıfını interface’e çevirmeniz yeterlidir. Tabi bu çevrim sırasında interface kurallarını dikkate almalı ve arabalari interfaceden türetirken yapılacak implementte override komutu olmadan uygulama gerçekleştirilmelidir. Bununla ilgili yazıda kod parçaaı koymayacağım ama github taki projede o kodlar mevcut.Umarım faydalı olmuştur iyi çalışmalar.

 Yararlandığım Kaynaklar

Kaynak Kodu 

https://www.gencayyildiz.com/blog/c-factory-method-design-patternfactory-method-tasarim-deseni/ 

http://www.canertosuner.com/post/factory-method-pattern-nedir-nasil-kullanilir 

Singleton Design Pattern Nedir ?

 

Singleton Design Pattern Nedir ?

Merhaba arkadaşlar bu yazımızda yazılımcılar tarafından en çok kullanılan tasarım kalıbı olan Singleton tasarım kalıbından bahsedeceğiz.Ama öncelikle çalışma mantığından bahsedelim.

Programlamada yaratılan her nesne ve değişken bellekte yer kaplar.Bazı nesneler vardır ki her istekte tekrar yaratılmasına ve bellekte yer kaplamasına gerek yoktur.Örneğin Db connection nesnesi veya Log nesnesi gibi. Her istek için ayrı ayrı bu nesneyi oluşturmak performans kaybına sebep olacaktır. Singleton ile oluşturulan nesneler tek bir örnek üzerinde kalır ve her istek bu örneği kullanır.

Signleton Design Pattern Kullanımı

Singleton design pattern deseninin 6 farklı şekilde kullanımı mevcut fakat ben en basit halini göstereceğim.Geri kalanlarına detaylı olarak buradan bakabilirsiniz.

En önemli kural burada Singleton ile ilgili sınıf dahilinde instance alınmasını önlemek, bu işlem için private ve protected access modifier ile classı tanımlayarak da yapılabilir fakat bizim isteklerimizden bir diğeri de yalnızca bir defa instance alınabilmesini sağlamak. O halde ilgili sınıfın içinde bir yerlerde nesnemizin oluşması gerekiyor. Bunu property veya statik bir metotla yapabiliriz.

Burada aslında en önemli noktalardan birinden bahsetmek istiyorum. Buradaki asıl amaç manuel olarak instance oluşturulmasını engellemek. Bu amaçla yola çıkarak Teksinif class’ımızın default constructor’unu private yapıyoruz ve ikinci bir instance oluşturulmasını engelliyoruz. Oluşturacağımız nesne sadece sınıf içerisinden oluşturulacağı için tek bir instance oluşturulmasını garantilemiş olacağız. Şimdi Teksinif class’ımızı görelim:

 

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
using System;
using System.Collections.Generic;
using System.Text;

namespace Singleton
{
    public class SingleClass
    {
        private SingleClass()
        {
            Random r = new Random();
            deger = r.Next();
        }
        private static SingleClass _instance;
        private static SingleClass instance
        {
            get
            {
                if (_instance == null)
                {
                    _instance = new SingleClass();
                }
                return _instance;

            }
            set
            {
                _instance = value;
            }

        }
        public int deger;
        public static SingleClass getInstance()
        {
            return instance;
        }
    }
}


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
using System;

namespace Singleton
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
            SingleClass tek = SingleClass.getInstance();

            Console.WriteLine("\n Ilk Instance: {0}", tek.deger);

            SingleClass tek2 = SingleClass.getInstance();
            Console.WriteLine("\n Ikinci Instance: {0}", tek2.deger);
        }
    }
}

Göründüğü üzere yapıcı metodumuz private erişim belirleyicisi ile korunmakta. Burada altını çizmem gereken yapıcı metodumun içerisinde deger değişkenimi random bir sayı ile doldurmam yani Main metodumda iki adet getInstance yaptığımda tek bir nesne ile mi çalıştığımızı anlayabilmek için.

Main tarafında test etmek için getInstance metodunu kullandık ve degerlerini test ediyoruz. Çıktı aşağıdaki gibi olmalı yani sayılar eşit olmalı.

 

 

Umarım faydalı olmuştur.Bir sonarki yazımızda görüşmek üzere.

Yaralanılan Kaynaklar

Kaynak Kodu 

http://sehmusgokce.com/singleton-tasarim-deseni-design-pattern-nedir-ve-nasil-kullanilir-324.html 

http://www.ismailgursoy.com.tr/singleton-pattern-design-tek-nesneler/

 

Design Pattern Nedir?

 

Design Pattern Nedir? 
 
Yazılım dünyasında temel bir yazılım diline sahip bir yazılımcı küçük çaplı projeleri rahatlıkla yazabilir. Fakat projeler büyüdükçe işler farklılaşmaya başlar. Örneğin küçük bir blog sitesi, bir araba kiralama tanıtım sitesi gibi projelerden temel bir dil bilgisiyle başa çıkılabilir. Ancak bir devletin vatandaş portali gibi yada tüm dünyada satış yapan bir e-ticaret platformu gibi projeler büyükçe işler biraz daha da değişiyor. Kullanıcı sayısı artıkça performansın da önemi ortaya çıkmaya başlıyor.
 
Haliyle de teknoloji sürekli değişiyor ve yeni teknolojiler çıkıyor. Projenin bu değişikliğe en hızlı şekilde adapte olması gerekiyor. Bu adapte sürecinde kodların çok yalın ve karmaşık olmaması lazım. İşte bu noktada tasarım kalıplarının zorunluluğu ortaya çıkmış oluyor.
 

Peki Design Pattern Nedir?

Tasarım desenleri, deneyimli nesne yönelimli yazılım geliştiriciler tarafından kullanılan en iyi uygulamaları temsil eder. Tasarım kalıpları, yazılım geliştiricilerin yazılım geliştirme sırasında karşılaştıkları genel sorunların çözümleridir. Bu çözümler, oldukça uzun bir süre boyunca sayısız yazılım geliştiricisi tarafından deneme yanılma yoluyla elde edilmiştir.
 

Desing Pattern’lerin Kullanımı

Tasarım desenleri yazılım geliştirmede iki ana kullanım alanına sahiptir.Bunlar;

Geliştiriciler için ortak platform: Tasarım desenleri standart bir terminoloji sağlar ve belirli senaryolara özgüdür. Örneğin, bir singleton tasarım deseni, tek bir nesnenin kullanımını belirtir, böylece tek tasarım modeline aşina olan tüm geliştiriciler, tek nesneden yararlanır ve programın bir singleton modelini takip ettiğini söyleyebilirler.

Pratik Uygulamaları: Tasarım Desenleri uzun bir süredir gelişmiştir ve yazılım geliştirme sırasında karşılaşılan bazı sorunlara en iyi çözümleri sunmaktadır. Bu kalıpları öğrenmek, deneyimsiz geliştiricilerin yazılım tasarımını kolay ve hızlı bir şekilde öğrenmelerine yardımcı olur.

Design Pattern Türleri: 1994 yılında dört yazar Erich Gamma, Richard Helm, Ralph Johnson ve John Vlissides, Yazılım geliştirmede tasarım deseni kavramını başlatan tasarım desenleri — Yeniden Kullanılabilir Nesneye Yönelik Yazılım Öğeleri başlıklı bir kitap yayımladı. Buradan bakabilirsiniz.

Bu yazarlar toplu olarak Dörtlü “Gang of Four” olarak bilinir. Bu yazarlara göre tasarım desenleri öncelikle nesne yönelimli tasarım ilkelerine dayanmaktadır. Bu dörtlü kitaplarında 3 kategoride 23 farklı kalıba yer vermişlerdir.

Creational: Nesneleri yaratmakta kullanılan 5 adet tasarım kalıbı. Yazılım sistemindeki nesnelerin yaratılışı hakkında yol gösterirler. Bunlar;

  1. Factory Method
  2. Singleton
  3. Abstract Factory
  4. Builder 

Structural: Nesneler arasındaki yapıları ifade eden ilişkilerden 7 adet tasarım kalıbı. Yazılım sistemindeki nesnelerin birbirleriyle olan ilişkilerini gösteren kalıptır.

  1. Adapter
  2. Bridge
  3. Composite
  4. Decorator
  5. Facade
  6. Flyweight
  7. Proxy

Behavioral: Nesnelerin çalışma zamanına ait davranışlarını değiştirmek için oluşturulan tasarımlardan 11 adet tasarım kalıbı var. Nesne davranışlarını takip eden kalıptır.

  1. Iterator
  2. Observer
  3. Memento
  4. Mediator
  5. Chain of Responsibility
  6. Command
  7. Observer
  8. State
  9. Strategy
  10. Template Method
  11. Visitor

Tasarım kalıpları, yazılım mühendisliği alanında yaygın olarak kullanılan bir yaklaşım olup, birçok yazılım projesinin tasarım ve geliştirme süreçlerinde başarıyla uygulanmaktadır. Bu kalıplar, çözümlenmesi zor olan sorunlara karşı etkili bir şekilde çözümler sunmak için kullanılan standart çözüm yaklaşımlarını temsil eder. Tasarım kalıpları, yazılım geliştiricilerinin tekrarlanan problemleri yeniden keşfetmelerini önleyerek, kodun yeniden kullanılabilirliğini ve sürdürülebilirliğini arttırır. Buna ek olarak, tasarım kalıpları, yazılım uygulamalarının performansını, güvenilirliğini ve esnekliğini artırabilir. Bu nedenle, tasarım kalıplarının kullanımı, yazılım geliştirme süreçlerinde çok önemlidir ve yazılım mühendislerinin bilgi birikimlerinde yer almalıdır.

Yararlanılan kaynaklar

https://www.tutorialspoint.com/design_pattern/factory_pattern.htm

https://medium.com/nsistanbul/design-patterns-factory-method-pattern-615457e9560b 

 

.Net Core'da Swagger UI Kullanımı

  Web API geliştirirken API de yazılan metodların ne iş yaptığı? Hangi parametreleri aldığı? Ne cevap döndüğü? Gibi bilgilerin yer aldığı ...