Tasarım Desenleri – Bölüm 3

Merhaba arkadaşlar,

Bugün tasarım desenlerinden bahsettiğim seride 3.bölüme yani Builder Design Pattern den bahsedeceğimiz bölüme geldik.

Öncelikle kısaca Builder Design Pattern nedir , neden kullanılır bahsedip daha sonra örnek bir uygulama ile sizlere anlatmaya çalışacağım.

Builder Design Pattern, nesnenin oluşması ile ilgili olan Creational Patterns altında yer alır.

Hemen neden ve ne zaman kullanırız kısmına gelelim. Elimizde birden fazla kombinasyonla kullanmak istediğimiz nesnemiz olduğu zaman, nesnenin inşasında birden fazla, farklı adımlarla üretim yapmak istediğimiz zaman, nesnenin sürekli geliştirilebilir olmasını istediğimiz zaman bu patternden yararlanırız.
Nesneler üretilirken yapıcı metotlardan (constructor) yararlanarak (overload ederek) farklı kombinasyonlarda üretilmesini sağlayabiliriz. Fakat nesne büyüdükçe ve kombinasyonlar arttıkça constructorların sayısı giderek artmaya ve kodun yönetilebilirliğini azaltmaya başlar. Bu yüzden bu gibi durumlarda Builder Patternden yararlanırız.

Şimdi geçelim örneğimize;

Diğer patternlerde de yaptığım gibi ben futbol takımları üzerinden ilerlemek istiyorum. Senaryomuz şu şekilde olacak takım (team nesnemiz) üreten bir director klasımız ve iki farklı takım üretecek şekilde builderımızdan türemiş klaslarımız olacak. Böylece team nesnesinin farklı kombinasyonlarını üretmiş olacağız.

 class Team
    {
        public string Name { get; set; } 
        public string Stadium { get; set; }  
        public void Show()
        {
            Console.WriteLine("Team is {0} and stadium is {1}",Name,Stadium);      
        }      
    }
 interface ITeamBuilder
    {
        void BuildTeamName();
        void BuildTeamStadium();
        Team GetTeam();
    }

    #region BesiktasBuilder (ConcreteBuilder)

    class BesiktasBuilder : ITeamBuilder
    {
        private Team team1=new Team();
        public void BuildTeamName()
        {
            team1.Name="Beşiktaş";
        }
        public void BuildTeamStadium()
        {
            team1.Stadium="Vodafone Park";
        }
        public Team GetTeam(){
            return team1;
        }
    }

    #endregion
    
    #region LiverpoolBuilder (ConcreteBuilder)
    
    class LiverpoolBuilder : ITeamBuilder
    {
        private Team team2=new Team();
        public void BuildTeamName()
        {
            team2.Name="Liverpool FC";
        }
        public void BuildTeamStadium()
        {
            team2.Stadium="Anfield";
        }
        public Team GetTeam(){
            return team2;
        }
    }

    #endregion
 class TeamFederation
    {
        public void TeamConstruct(ITeamBuilder teamBuilder)
        {
            teamBuilder.BuildTeamName();
            teamBuilder.BuildTeamStadium();
        }
    }
  static void Main(string[] args)
        {
            TeamFederation teamFederation = new TeamFederation();
 
            BesiktasBuilder besiktasBuilder = new BesiktasBuilder();
            LiverpoolBuilder liverpoolBuilder = new LiverpoolBuilder();

            teamFederation.TeamConstruct(besiktasBuilder);
            Team besiktas = besiktasBuilder.GetTeam();
            besiktas.Show();
 
            teamFederation.TeamConstruct(liverpoolBuilder);
            Team liverpool = liverpoolBuilder.GetTeam();
            liverpool.Show();
 
            Console.ReadKey();
        }

Evet arkadaşlar sizlere Builder Patterni anlatmaya çalıştım. Umarım faydalı olmuş, anlaşılmıştır. Kalın sağlıcakla …

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

Kaynaklar
https://www.dofactory.com/net/builder-design-pattern
https://www.turkayurkmez.com/builder-design-pattern/
https://www.tutorialspoint.com/design_pattern/builder_pattern.htm
https://refactoring.guru/design-patterns/builder

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