Tasarım Desenleri – Bölüm 1

Merhaba arkadaşlar,

Bir süre önce ” Nedir Bu Tasarım Desenleri ? “ yazısında yüzeysel ve teorik olarak bahsettiğim desenleri, bir seri olacak şekilde detaylandırmaya ve örneklerle anlatmaya çalışacağım.

Seriye Creational Patterns (Sanırım oluşturucu desenler diyebiliriz 😀 ), altındaki Abstract Factory patterni ile başlayacağım. Daha sonra her bölümde bir Creational Pattern anlatmaya çalışarak devam edeceğim. Yoğunluğa ve içerik planlamama göre Structural Patterns ( Yapısal Desenler ), Behavioral Patterns ( Davranışsal Desenler ) altındaki belli başlı desenleri de aktarmaya çalışabilirim.

Öncelikle Creational Patterns’leri hatırlayarak başlayalım;
Creational Patterns-Kurucu Desenler: Nesnelerin oluşturulması ile ilgili patternlerdir.

  • Abstract Factory: İlişkili sınıfların oluşturulmasında kullanılır.
  • Factory Method: Birden fazla türetilmiş sınıfın tek bir örneğinin oluşturulmasında kullanılır.
  • Builder: Nesne üretilirken belirli özellikler vermemizi sağlayan desendir.
  • Prototype: Nesnenin bir prototipten kopyalanarak üretilmesinde kullanılır.
  • Singleton: En çok bilinen tasarım desenlerinden biridir. Programın yaşam döngüsü içerisinde bir nesnenin sadece bir kez oluşturulmasında kullanılır.

Şimdi bu bölümün konusu olan ilk patternimiz Abstract Factory patternini incelemeye çalışalım.

Abstract Factory, farklı ürünleri üreten fabrikaların soyutlanması olarak tanımlanabilir. Soyutlama ile beraber daha geliştirilebilir, okunabilir bir kod yapısına ulaşmak ve tekrar eden if-else yapılarından kurtulmak için kullanabiliriz. Öncelikle UML diyagramını görelim, daha sonra da kod örneği ile devam edelim.

Abstract Factory UML Şeması - codesenior.com
Abstract Factory UML Şeması – codesenior.com

Şimdi de takım kavramı ve bu takımlara ait renk ve stadyum adını döndüren Abstract Factory örneğimize bakalım.

public interface Team
    {
        string  getTeamColor();
        string getStadium();
    }

    #region  Teams

    public class Besiktas : Team
    {
        public string getStadium()
        {
           return "Vodafone Park";
        }

        public string getTeamColor()
        {
            return "Black-White";
        }
    }

    public class RealMadrid : Team
    {
        public string getStadium()
        {
           return "Santiago Bernabéu";
        }

        public string getTeamColor()
        {
            return "White";
        }
    }

    #endregion
   
    #region  Factories
    
    public interface TeamAbstractFactory 
    {
        Team createTeam();
    }

    public class BesiktasFactory : TeamAbstractFactory
    {
        public Team createTeam()
        {
            return new Besiktas();
        }
    }

    public class RealMadridFactory : TeamAbstractFactory
    {
        public Team createTeam()
        {
            return new RealMadrid();
        }
    }

    //Produces team by factory type
    public class TeamFactory
    {        
        public static Team getTeam(TeamAbstractFactory factory)
        {
            return factory.createTeam();
        }
    }

    #endregion

    class Program
    {
        static void Main(string[] args)
        {
            Team besiktas=TeamFactory.getTeam(new BesiktasFactory());
            Team realMadrid=TeamFactory.getTeam(new RealMadridFactory());

            Console.WriteLine("Beşiktaş stadium is {0} and color {1}",besiktas.getStadium(),besiktas.getTeamColor());
            Console.WriteLine("Real Madrid stadium is {0} and color {1}",realMadrid.getStadium(),realMadrid.getTeamColor());
        }
    }

Kaynak Kod =>  https://github.com/EnesAys/DesignPatterns

Bir daha ki bölümde görüşmek üzere. Kalın sağlıcakla …

Kaynaklar

https://www.dofactory.com/net/abstract-factory-design-pattern
http://www.codesenior.com/tutorial/Soyut-Fabrika-Abstract-Factory-Tasarim-Deseni
https://kodcu.com/2014/08/design-patterns-1-giris-factory-ve-abstract-factory-tasarim-kaliplari-2/

Written By

Bir önceki günden daha iyi olmak için çalışarak kendimi geliştirmek, öğrendiklerim ve öğreneceklerim ile yazılım sektöründe büyük ölçekli ve uluslararası projelerde kendimden söz ettirmek istiyorum.

More From Author

You May Also Like

Leave a Reply

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir