﻿
{"id":4367,"date":"2016-05-27T14:04:50","date_gmt":"2016-05-27T14:04:50","guid":{"rendered":"http:\/\/www.gencayyildiz.com\/blog\/?p=4367"},"modified":"2016-05-27T14:04:50","modified_gmt":"2016-05-27T14:04:50","slug":"c-builder-design-patternbuilder-tasarim-deseni","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/c-builder-design-patternbuilder-tasarim-deseni\/","title":{"rendered":"C# Builder Design Pattern(Builder Tasar\u0131m Deseni)"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>Merhaba,<\/p>\n<p>Bu yaz\u0131m\u0131zda Creational Patterns(Olu\u015fturucu Kal\u0131plar) kategorisine giren Builder Design Pattern \u00fczerine uzun uzun ve bol \u00f6rnekler e\u015fli\u011finde bir i\u00e7erik olu\u015fturaca\u011f\u0131z.<\/p>\n<p>\u00dczerine \u00e7al\u0131\u015ft\u0131\u011f\u0131m\u0131z projenin ihtiya\u00e7lar\u0131 artt\u0131k\u00e7a, uygulamada kullanaca\u011f\u0131m\u0131z nesnelerin maliyetleride do\u011fru orant\u0131l\u0131 olarak artmaktad\u0131r. Hal b\u00f6yleyken, k\u0103h uygulad\u0131\u011f\u0131m\u0131z tasar\u0131m desenlerinin i\u00e7erikleri geli\u015ftirilmekte k\u0103h farkl\u0131 tasar\u0131msal yakla\u015f\u0131mlara ihtiya\u00e7lar hissedilmektedir.<\/p>\n<p>Builder Design Pattern ad\u0131 \u00fczerinde bir in\u015faat\u00e7\u0131 g\u00f6rev \u00fcstlenen yakla\u015f\u0131m sergilemektedir. Projemiz in\u015fa s\u00fcresindeyken olu\u015fturaca\u011f\u0131m\u0131z baz\u0131 nesnelerin \u00fcretimleri olduk\u00e7a maliyetli olabilir, zamanla bu nesnelerin yap\u0131s\u0131 de\u011fi\u015febilir yahut g\u00fcncellenebilir. Anlayaca\u011f\u0131n\u0131z nesne \u00fczerinde her t\u00fcrl\u00fc dinamik s\u00fcre\u00e7 ya\u015fanabilir. \u0130\u015fte bu tarz in\u015fa durumlar\u0131nda Builder D.P. ile ilgili nesneler geni\u015fletilebilir bir hale getirilmekte ve en \u00f6nemlisi kod karma\u015fal\u0131\u011f\u0131 minimize edilmektedir.<\/p>\n<p>Asl\u0131nda yaz\u0131m\u0131z\u0131n devam\u0131nda bol bol \u00f6rneklendirerek somutla\u015ft\u0131raca\u011f\u0131m\u0131z ad\u0131ma gelmeden evvel bu deseni neden tercih etti\u011fimiz \u00fczerinde teorik olarak biraz daha durmak istiyorum.<\/p>\n<p>Yukar\u0131da bahsetti\u011fimiz o kompleks ve maliyetli nesnelerin olu\u015fturulmas\u0131ndan Builder dedi\u011fimiz s\u0131n\u0131f sorumlu tutulacakt\u0131r. Client, hangi nesnenin olu\u015fturulaca\u011f\u0131n\u0131 t\u00fcr\u00fc arac\u0131l\u0131\u011f\u0131yla belirtece\u011finden dolay\u0131 olu\u015fturulacak as\u0131l nesneyle ve olu\u015fturulmas\u0131yla ilgilenmeyecektir. Dolay\u0131s\u0131yla istemciyi maliyetli nesnelerin \u00fcretimsel sorumlulu\u011fu olan bu tarz bir i\u015flevden kurtarm\u0131\u015f olaca\u011f\u0131z. Ayriyetten, olu\u015fturulacak nesnenin gerekli t\u00fcm donan\u0131m\u0131n\u0131 ilgili desen halledece\u011fi i\u00e7in istemciye sadece ne istedi\u011fini bilmek kalacakt\u0131r.<\/p>\n<p>\u015eimdi yava\u015f yava\u015f Builder D.P.&#8217;e pratikten girmeye ba\u015flayal\u0131m.<\/p>\n<p><a href=\"http:\/\/www.gencayyildiz.com\/blog\/c-builder-design-patternbuilder-tasarim-deseni\/c-builder-design-patternbuilder-tasarim-deseni\/\" rel=\"attachment wp-att-4371\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-4371\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/05\/C-Builder-Design-PatternBuilder-Tasar\u0131m-Deseni.png\" alt=\"C# Builder Design Pattern(Builder Tasar\u0131m Deseni)\" width=\"634\" height=\"283\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/05\/C-Builder-Design-PatternBuilder-Tasar\u0131m-Deseni.png 634w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/05\/C-Builder-Design-PatternBuilder-Tasar\u0131m-Deseni-300x134.png 300w\" sizes=\"auto, (max-width: 634px) 100vw, 634px\" \/><\/a><\/p>\n<p>Evet, yukar\u0131daki \u015femay\u0131 incelerseniz e\u011fer g\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi &#8220;Builder&#8221;, &#8220;ConcreteBuilder&#8221;, &#8220;Product&#8221; ve &#8220;Director&#8221; isminde d\u00f6rt adet terimimiz mevcuttur. Builder paterninin senaryosunda kullanaca\u011f\u0131m\u0131z bu akt\u00f6rler kimlermi\u015f inceleyelim;<\/p>\n<ul>\n<li><em><strong>Product<\/strong><\/em><br \/>\n\u0130n\u015fa sonucunda elde etmek istedi\u011fimiz nesnemizdir. \u015eemay\u0131 incelerseniz e\u011fer ConcreteBuilder s\u0131n\u0131f\u0131 taraf\u0131ndan \u00fcretilmektedir.<\/li>\n<li><em><strong>ConcreteBuilder<\/strong><\/em><br \/>\nG\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi Product ismini verdi\u011fimiz nesneyi olu\u015fturmaktad\u0131r. Olu\u015fturulacak Product&#8217;\u0131n temel \u00f6zellik ve donan\u0131m\u0131n\u0131 sa\u011flayan s\u0131n\u0131ft\u0131r.<\/li>\n<li><em><strong>Builder<\/strong><\/em><br \/>\nProduct nesnesinin olu\u015fturulmas\u0131 i\u00e7in gerekli aray\u00fcz\u00fc sa\u011flar. Dikkat ederseniz ConcreteBuilder nesnesi ile kal\u0131tsal bir durum s\u00f6z konusudur.<\/li>\n<li><em><strong>Director<\/strong><\/em><br \/>\nYapt\u0131\u011f\u0131m\u0131z tasar\u0131m sonucunda bir Builder referans\u0131 \u00fczerinden Client taraf\u0131ndan nesne \u00fcretim talebine cevap verir.<\/li>\n<\/ul>\n<p>Konuyla ilgili terminoloji a\u015famas\u0131ndan sonra s\u0131ra bir ka\u00e7 senaryo \u00fczerinden Builder desenini \u00f6rneklendirmeye geldi.<\/p>\n<p><span style=\"color: #ff0000;\"><em><strong>1. Senaryo<\/strong><\/em><\/span><br \/>\n<a href=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/05\/C-Builder-Design-PatternBuilder-Tasar\u0131m-Deseni-1.jpg\" rel=\"attachment wp-att-4396\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-4396 size-medium\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/05\/C-Builder-Design-PatternBuilder-Tasar\u0131m-Deseni-1-260x300.jpg\" alt=\"C# Builder Design Pattern(Builder Tasar\u0131m Deseni)\" width=\"260\" height=\"300\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/05\/C-Builder-Design-PatternBuilder-Tasar\u0131m-Deseni-1-260x300.jpg 260w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/05\/C-Builder-Design-PatternBuilder-Tasar\u0131m-Deseni-1.jpg 405w\" sizes=\"auto, (max-width: 260px) 100vw, 260px\" \/><\/a><br \/>\n\u00d6ncelikle ele alaca\u011f\u0131m\u0131z senaryomuz birbirinden farkl\u0131 \u00f6zellik ve markalara sahip araba \u00fcretecek bir yap\u0131 olu\u015fturmaktad\u0131r.<\/p>\n<p>Burada olu\u015fturmak istedi\u011fimiz \u00fcr\u00fcn araba olaca\u011f\u0131 i\u00e7in Product nesnemiz <strong><em><span style=\"color: #800080;\">Araba<\/span><\/em><\/strong> s\u0131n\u0131f\u0131 olacakt\u0131r. Arabay\u0131 \u00fcrettirecek olan Opel, Ford, Mercedes vs. gibi birbirlerinden farkl\u0131 \u00f6zellik te\u015fkil edecek olan t\u00fcm s\u0131n\u0131flar\u0131m\u0131z ConcreteBuilder s\u0131n\u0131f\u0131m\u0131z olacakt\u0131r.<\/p>\n<p>\u00d6ncelikle Product Class&#8217;\u0131m\u0131z\u0131 olu\u015fturuyoruz.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    \/\/Product Class\r\n    class Araba\r\n    {\r\n        public string Marka { get; set; }\r\n        public string Model { get; set; }\r\n        public double KM { get; set; }\r\n        public bool Vites { get; set; }\r\n        public override string ToString()\r\n        {\r\n            return $&quot;{Marka} marka araba {Model} modelinde {KM} kilometrede {Vites} vites olarak \u00fcretilmi\u015ftir.&quot;;\r\n        }\r\n    }\r\n<\/pre>\n<p>\u015eimdi ise Builder aray\u00fcz\u00fcm\u00fcz\u00fc olu\u015ftural\u0131m.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    \/\/Builder\r\n    abstract class IArabaBuilder\r\n    {\r\n        protected Araba araba;\r\n        public Araba Araba\r\n        {\r\n            get { return araba; }\r\n        }\r\n\r\n        public abstract void SetMarka();\r\n        public abstract void SetModel();\r\n        public abstract void SetKM();\r\n        public abstract void SetVites();\r\n    }\r\n<\/pre>\n<p>Burada dikkat etmeniz gereken husus, Builder s\u0131n\u0131f\u0131m\u0131zda Araba referans\u0131n\u0131 protected olarak i\u015faretlememizdir. Bunun sebebi, bu Builder Class&#8217;\u0131n uygulanaca\u011f\u0131 Derived Class&#8217;lardan bu fielda eri\u015filebilmesi i\u00e7indir.<\/p>\n<p>Ard\u0131ndan ConcreteBuilder nesnelerimizi olu\u015ftural\u0131m.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    \/\/ConcreteBuilder Class\r\n    class OpelConcreteBuilder : IArabaBuilder\r\n    {\r\n        public OpelConcreteBuilder()\r\n        {\r\n            araba = new Araba();\r\n        }\r\n        public override void SetKM() =&gt; araba.KM = 100;\r\n        public override void SetMarka() =&gt; araba.Marka = &quot;Opel&quot;;\r\n        public override void SetModel() =&gt; araba.Model = &quot;Astra&quot;;\r\n        public override void SetVites() =&gt; araba.Vites = true;\r\n    }\r\n    \/\/ConcreteBuilder Class\r\n    class ToyotaConcreteBuilder : IArabaBuilder\r\n    {\r\n        public ToyotaConcreteBuilder()\r\n        {\r\n            araba = new Araba();\r\n        }\r\n        public override void SetKM() =&gt; araba.KM = 150;\r\n        public override void SetMarka() =&gt; araba.Marka = &quot;Toyota&quot;;\r\n        public override void SetModel() =&gt; araba.Model = &quot;Corolla&quot;;\r\n        public override void SetVites() =&gt; araba.Vites = true;\r\n    }\r\n    \/\/ConcreteBuilder Class\r\n    class BMWConcreteBuilder : IArabaBuilder\r\n    {\r\n        public BMWConcreteBuilder()\r\n        {\r\n            araba = new Araba();\r\n        }\r\n        public override void SetKM() =&gt; araba.KM = 25;\r\n        public override void SetMarka() =&gt; araba.Marka = &quot;BMW&quot;;\r\n        public override void SetModel() =&gt; araba.Model = &quot;X Bilmem Ka\u00e7&quot;;\r\n        public override void SetVites() =&gt; araba.Vites = true;\r\n    }\r\n<\/pre>\n<p>Son olarak Director Class&#8217;\u0131 olu\u015ftural\u0131m.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    \/\/Director Class\r\n    class ArabaUret\r\n    {\r\n        public void Uret(IArabaBuilder Araba)\r\n        {\r\n            Araba.SetKM();\r\n            Araba.SetMarka();\r\n            Araba.SetModel();\r\n            Araba.SetVites();\r\n        }\r\n    }\r\n<\/pre>\n<p>Evet, g\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi Araba \u00fcretimi i\u00e7in Builder D.P.&#8217;i uygulam\u0131\u015f olduk. \u015eimdi bir Client taraf\u0131ndan araba talebinde bulunabiliriz.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    \/\/Client\r\n    class Program\r\n    {\r\n        static void Main(string&#x5B;] args)\r\n        {\r\n            IArabaBuilder araba = new OpelConcreteBuilder();\r\n            ArabaUret uret = new ArabaUret();\r\n            uret.Uret(araba);\r\n\r\n            Console.WriteLine(araba.Araba.ToString());\r\n\r\n            araba = new ToyotaConcreteBuilder();\r\n            uret.Uret(araba);\r\n            Console.WriteLine(araba.Araba.ToString());\r\n\r\n            Console.Read();\r\n        }\r\n    }\r\n<\/pre>\n<p>Yukar\u0131daki yapt\u0131\u011f\u0131m\u0131z i\u015flemin \u00e7\u0131kt\u0131s\u0131 a\u015fa\u011f\u0131daki gibidir.<br \/>\n<a href=\"http:\/\/www.gencayyildiz.com\/blog\/c-builder-design-patternbuilder-tasarim-deseni\/c-builder-design-patternbuilder-tasarim-deseni-2\/\" rel=\"attachment wp-att-4391\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-4391\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/05\/C-Builder-Design-PatternBuilder-Tasar\u0131m-Deseni.jpg\" alt=\"C# Builder Design Pattern(Builder Tasar\u0131m Deseni)\" width=\"688\" height=\"80\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/05\/C-Builder-Design-PatternBuilder-Tasar\u0131m-Deseni.jpg 688w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/05\/C-Builder-Design-PatternBuilder-Tasar\u0131m-Deseni-300x35.jpg 300w\" sizes=\"auto, (max-width: 688px) 100vw, 688px\" \/><\/a><\/p>\n<p>G\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi, her ne kadar ConcreteBuilder nesneleri \u00fczerinde \u00e7al\u0131\u015fm\u0131\u015f olsakta aslen arka planda Product nesnesi \u00fcretilmektedir. Sadece o anki \u00e7al\u0131\u015f\u0131lan ConcreteBuilder nesnesine \u00f6zel bir Product in\u015fa edilmektedir.<\/p>\n<hr>\n<p><span style=\"color: #ff0000;\"><em><strong>2. Senaryo<\/strong><\/em><\/span><br \/>\n<a href=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/05\/C-Builder-Design-PatternBuilder-Tasar\u0131m-Deseni-3.jpg\" rel=\"attachment wp-att-4400\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-4400 size-medium\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/05\/C-Builder-Design-PatternBuilder-Tasar\u0131m-Deseni-3-245x300.jpg\" alt=\"C# Builder Design Pattern(Builder Tasar\u0131m Deseni)\" width=\"245\" height=\"300\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/05\/C-Builder-Design-PatternBuilder-Tasar\u0131m-Deseni-3-245x300.jpg 245w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/05\/C-Builder-Design-PatternBuilder-Tasar\u0131m-Deseni-3.jpg 443w\" sizes=\"auto, (max-width: 245px) 100vw, 245px\" \/><\/a><br \/>\nBuilder desenini daha da a\u00e7mak i\u00e7in bir ba\u015fka \u00f6rne\u011fimizde bir firman\u0131n farkl\u0131 profildeki \u00e7al\u0131\u015fanlar\u0131na g\u00f6nderece\u011fi promosyonlard\u0131r. Burada farkl\u0131 \u00e7al\u0131\u015fan profilleri i\u00e7in \u00f6zel geli\u015ftirilecek promosyon \u00fcr\u00fcnlerinin geli\u015ftirilmesi safhas\u0131ndaki \u00fcretim karma\u015f\u0131kl\u0131\u011f\u0131, Builder deseni ile istemciden uzakla\u015ft\u0131r\u0131labilir.<\/p>\n<p>Bu senaryoda promosyon \u00fcr\u00fcn\u00fc Product iken, \u00fcr\u00fcn\u00fcn g\u00f6nderilece\u011fi \u00e7al\u0131\u015fan profilleri ConcreteBuilder s\u0131n\u0131flar\u0131na denklik g\u00f6stermektedir.<\/p>\n<p>\u00d6ncelikle promosyonumuz olan Product nesnemizi olu\u015ftural\u0131m.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    \/\/Product\r\n    class Promosyon\r\n    {\r\n        public string UrunAdi { get; set; }\r\n        public int PromosyonNumarasi { get; set; }\r\n        public string CalisanProfili { get; set; }\r\n        public override string ToString()\r\n        {\r\n            Console.WriteLine($&quot;{PromosyonNumarasi} numaral\u0131 {UrunAdi} promosyonu {CalisanProfili} cal\u0131\u015fanlar\u0131na verilmi\u015ftir.&quot;);\r\n            return &quot;&quot;;\r\n        }\r\n    }\r\n<\/pre>\n<p>Ard\u0131ndan Product nesnesini olu\u015fturmak i\u00e7in ConcreteBuilder s\u0131n\u0131flar\u0131n\u0131n aray\u00fcz\u00fc olacak Builder s\u0131n\u0131f\u0131n\u0131 tasarlayal\u0131m.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    \/\/Builder Class\r\n    abstract class PromosyonBuilder\r\n    {\r\n        protected Promosyon promosyon;\r\n        public Promosyon Promosyon\r\n        {\r\n            get\r\n            {\r\n                return promosyon;\r\n            }\r\n        }\r\n        public abstract void SetUrunAdi();\r\n        public abstract void SetPromosyonNumarasi();\r\n        public abstract void SetCalisanProfili();\r\n    }\r\n<\/pre>\n<p>\u015eimdi s\u0131ra Product nesnemizi olu\u015fturacak ConcreteBuilder s\u0131n\u0131flar\u0131n\u0131 olu\u015fturmaya geldi.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    \/\/ConcreteBuilder Class\r\n    class AmirlerConcreteBuilder : PromosyonBuilder\r\n    {\r\n        public AmirlerConcreteBuilder()\r\n        {\r\n            promosyon = new Promosyon();\r\n        }\r\n        public override void SetCalisanProfili() =&gt; promosyon.CalisanProfili = &quot;Amirler&quot;;\r\n        public override void SetPromosyonNumarasi() =&gt; promosyon.PromosyonNumarasi = 100;\r\n        public override void SetUrunAdi() =&gt; promosyon.UrunAdi = &quot;Job&quot;;\r\n    }\r\n    \/\/ConcreteBuilder Class\r\n    class IscilerConcreteBuilder : PromosyonBuilder\r\n    {\r\n        public IscilerConcreteBuilder()\r\n        {\r\n            promosyon = new Promosyon();\r\n        }\r\n        public override void SetCalisanProfili() =&gt; promosyon.CalisanProfili = &quot;\u0130\u015f\u00e7iler&quot;;\r\n        public override void SetPromosyonNumarasi() =&gt; promosyon.PromosyonNumarasi = 270;\r\n        public override void SetUrunAdi() =&gt; promosyon.UrunAdi = &quot;Ceket&quot;;\r\n    }    \r\n    \/\/ConcreteBuilder Class\r\n    class KadinlarConcreteBuilder : PromosyonBuilder\r\n    {\r\n        public KadinlarConcreteBuilder()\r\n        {\r\n            promosyon = new Promosyon();\r\n        }\r\n        public override void SetCalisanProfili() =&gt; promosyon.CalisanProfili = &quot;Kad\u0131nlar&quot;;\r\n        public override void SetPromosyonNumarasi() =&gt; promosyon.PromosyonNumarasi = 125;\r\n        public override void SetUrunAdi() =&gt; promosyon.UrunAdi = &quot;Tesbih&quot;;\r\n    }\r\n<\/pre>\n<p>Son olarak nesne \u00fcretimini ger\u00e7ekle\u015ftirecek Director s\u0131n\u0131f\u0131m\u0131z\u0131 in\u015fa edelim.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    \/\/Director Class\r\n    class PromosyonGonder\r\n    {\r\n        public void Gonder(PromosyonBuilder builder)\r\n        {\r\n            builder.SetCalisanProfili();\r\n            builder.SetPromosyonNumarasi();\r\n            builder.SetUrunAdi();\r\n        }\r\n    }\r\n<\/pre>\n<p>Son olarak yapt\u0131\u011f\u0131m\u0131z bu deseni deneyelim.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    class Program\r\n    {\r\n        static void Main(string&#x5B;] args)\r\n        {\r\n            PromosyonBuilder promosyon = new AmirlerConcreteBuilder();\r\n            PromosyonGonder gonder = new PromosyonGonder();\r\n            gonder.Gonder(promosyon);\r\n            promosyon.Promosyon.ToString();\r\n\r\n            promosyon = new KadinlarConcreteBuilder();\r\n            gonder.Gonder(promosyon);\r\n            promosyon.Promosyon.ToString();\r\n\r\n            Console.Read();\r\n        }\r\n    }\r\n<\/pre>\n<p><a href=\"http:\/\/www.gencayyildiz.com\/blog\/c-builder-design-patternbuilder-tasarim-deseni\/c-builder-design-patternbuilder-tasarim-deseni-4\/\" rel=\"attachment wp-att-4398\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-4398\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/05\/C-Builder-Design-PatternBuilder-Tasar\u0131m-Deseni-2.jpg\" alt=\"C# Builder Design Pattern(Builder Tasar\u0131m Deseni)\" width=\"548\" height=\"72\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/05\/C-Builder-Design-PatternBuilder-Tasar\u0131m-Deseni-2.jpg 548w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/05\/C-Builder-Design-PatternBuilder-Tasar\u0131m-Deseni-2-300x39.jpg 300w\" sizes=\"auto, (max-width: 548px) 100vw, 548px\" \/><\/a><\/p>\n<hr>\n<p><span style=\"color: #ff0000;\"><em><strong>3. Senaryo<\/strong><\/em><\/span><br \/>\n<a href=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/05\/C-Builder-Design-PatternBuilder-Tasar\u0131m-Deseni-5.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/05\/C-Builder-Design-PatternBuilder-Tasar\u0131m-Deseni-5-286x300.jpg\" alt=\"C# Builder Design Pattern(Builder Tasar\u0131m Deseni)\" width=\"286\" height=\"300\" class=\"aligncenter size-medium wp-image-4406\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/05\/C-Builder-Design-PatternBuilder-Tasar\u0131m-Deseni-5-286x300.jpg 286w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/05\/C-Builder-Design-PatternBuilder-Tasar\u0131m-Deseni-5.jpg 516w\" sizes=\"auto, (max-width: 286px) 100vw, 286px\" \/><\/a><br \/>\n3. ve son senaryomuzda yemek yap\u0131m\u0131d\u0131r. Burada yemek Product&#8217;umuz olurken; sulu, etli, sebzeli vs. ConcreteBuilder s\u0131n\u0131flar\u0131m\u0131z olacakt\u0131r.<\/p>\n<p>\u00d6ncelikle Product&#8217;\u0131m\u0131z\u0131 geli\u015ftirelim.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    enum YemekTipi\r\n    {\r\n        Sulu, Etli, Sebzeli\r\n    }\r\n    \/\/Product\r\n    class Yemek\r\n    {\r\n        public YemekTipi YemekTipi { get; set; }\r\n        public string YemekAdi { get; set; }\r\n        public double Tuz { get; set; }\r\n        public override string ToString()\r\n        {\r\n            Console.WriteLine($&quot;{YemekTipi} -&gt; Tuz Oran\u0131 : {Tuz}&quot;);\r\n            return base.ToString();\r\n        }\r\n    }\r\n<\/pre>\n<p>\u015eimdi s\u0131ra Builder s\u0131n\u0131f\u0131m\u0131z\u0131 olu\u015fturmada.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    \/\/Builder Class\r\n    abstract class YemekBuilder\r\n    {\r\n        protected Yemek yemek;\r\n\r\n        public Yemek Yemek\r\n        {\r\n            get\r\n            {\r\n                return yemek;\r\n            }\r\n        }\r\n        abstract public void SetYemekTipi();\r\n        abstract public void SetYemekAdi();\r\n        abstract public void SetTuz();\r\n    }\r\n<\/pre>\n<p>S\u0131ra ConcreteBuilder s\u0131n\u0131flar\u0131m\u0131z\u0131 olu\u015fturmaya geldi.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    \/\/ConcreteBuilder Class\r\n    class SuluYemekConcreteBuilder : YemekBuilder\r\n    {\r\n        public SuluYemekConcreteBuilder()\r\n        {\r\n            yemek = new Yemek();\r\n        }\r\n        public override void SetTuz() =&gt; yemek.Tuz = 75;\r\n        public override void SetYemekAdi() =&gt; yemek.YemekAdi = &quot;\u00c7orba&quot;;\r\n        public override void SetYemekTipi() =&gt; yemek.YemekTipi = YemekTipi.Sulu;\r\n    }\r\n    \/\/ConcreteBuilder Class\r\n    class EtliYemekConcreteBuilder : YemekBuilder\r\n    {\r\n        public EtliYemekConcreteBuilder()\r\n        {\r\n            yemek = new Yemek();\r\n        }\r\n        public override void SetTuz() =&gt; yemek.Tuz = 65;\r\n        public override void SetYemekAdi() =&gt; yemek.YemekAdi = &quot;Etli Pilav&quot;;\r\n        public override void SetYemekTipi() =&gt; yemek.YemekTipi = YemekTipi.Etli;\r\n    }\r\n    \/\/ConcreteBuilder Class\r\n    class SebzeliYemekConcreteBuilder : YemekBuilder\r\n    {\r\n        public SebzeliYemekConcreteBuilder()\r\n        {\r\n            yemek = new Yemek();\r\n        }\r\n        public override void SetTuz() =&gt; yemek.Tuz = 15;\r\n        public override void SetYemekAdi() =&gt; yemek.YemekAdi = &quot;P\u0131rasa&quot;;\r\n        public override void SetYemekTipi() =&gt; yemek.YemekTipi = YemekTipi.Sebzeli;\r\n    }\r\n<\/pre>\n<p>\u015eimdide Director s\u0131n\u0131f\u0131m\u0131 olu\u015ftural\u0131m.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    \/\/Director Class\r\n    class YemekYapici\r\n    {\r\n        public void YemekYap(YemekBuilder builder)\r\n        {\r\n            builder.SetTuz();\r\n            builder.SetYemekAdi();\r\n            builder.SetYemekTipi();\r\n        }\r\n    }\r\n<\/pre>\n<p>Kullanal\u0131m&#8230;<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    class Program\r\n    {\r\n        static void Main(string&#x5B;] args)\r\n        {\r\n            YemekBuilder builder = new SuluYemekConcreteBuilder();\r\n            YemekYapici yemekYapici = new YemekYapici();\r\n            yemekYapici.YemekYap(builder);\r\n            builder.Yemek.ToString();\r\n\r\n            builder = new EtliYemekConcreteBuilder();\r\n            yemekYapici.YemekYap(builder);\r\n            builder.Yemek.ToString();\r\n\r\n            Console.Read();\r\n        }\r\n    }\r\n<\/pre>\n<p><a href=\"http:\/\/www.gencayyildiz.com\/blog\/c-builder-design-patternbuilder-tasarim-deseni\/c-builder-design-patternbuilder-tasarim-deseni-6\/\" rel=\"attachment wp-att-4404\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/05\/C-Builder-Design-PatternBuilder-Tasar\u0131m-Deseni-4.jpg\" alt=\"C# Builder Design Pattern(Builder Tasar\u0131m Deseni)\" width=\"205\" height=\"74\" class=\"aligncenter size-full wp-image-4404\" \/><\/a><\/p>\n<p>San\u0131r\u0131m bu yaz\u0131m\u0131zda da Builder D.P.&#8217;i yeterince detayland\u0131rd\u0131\u011f\u0131m\u0131z\u0131 d\u00fc\u015f\u00fcn\u00fcyorum.<\/p>\n<p>Okudu\u011funuz i\u00e7in te\u015fekk\u00fcr ederim&#8230;<\/p>\n<p>Sonraki yaz\u0131lar\u0131mda g\u00f6r\u00fc\u015fmek \u00fczere&#8230;<br \/>\n\u0130yi \u00e7al\u0131\u015fmalar dilerim&#8230;<\/p>\n<!-- AddThis Advanced Settings generic via filter on the_content --><!-- AddThis Share Buttons generic via filter on the_content -->","protected":false},"excerpt":{"rendered":"<p>Merhaba, Bu yaz\u0131m\u0131zda Creational Patterns(Olu\u015fturucu Kal\u0131plar) kategorisine giren Builder Design Pattern \u00fczerine uzun uzun ve bol \u00f6rnekler e\u015fli\u011finde bir i\u00e7erik olu\u015fturaca\u011f\u0131z. \u00dczerine \u00e7al\u0131\u015ft\u0131\u011f\u0131m\u0131z projenin ihtiya\u00e7lar\u0131 artt\u0131k\u00e7a, uygulamada kullanaca\u011f\u0131m\u0131z nesnelerin maliyetleride do\u011fru orant\u0131l\u0131 olarak artmaktad\u0131r.&#46;&#46;&#46;<!-- AddThis Advanced Settings generic via filter on get_the_excerpt --><!-- AddThis Share Buttons generic via filter on get_the_excerpt --><\/p>\n","protected":false},"author":1,"featured_media":4371,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[153],"tags":[1213,1209,1210,1212,925,1214,926,1211],"class_list":["post-4367","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-design-pattern","tag-builder","tag-builder-design-pattern","tag-builder-tasarim-deseni","tag-concretebuilder","tag-creational-patterns","tag-director","tag-olusturucu-kaliplar","tag-product"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/4367","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/comments?post=4367"}],"version-history":[{"count":0,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/4367\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media\/4371"}],"wp:attachment":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media?parent=4367"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=4367"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=4367"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}