﻿
{"id":3981,"date":"2016-04-10T01:10:49","date_gmt":"2016-04-10T01:10:49","guid":{"rendered":"http:\/\/www.gencayyildiz.com\/blog\/?p=3981"},"modified":"2016-04-10T01:10:49","modified_gmt":"2016-04-10T01:10:49","slug":"c-strategy-design-patternstrateji-tasarim-deseni","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/c-strategy-design-patternstrateji-tasarim-deseni\/","title":{"rendered":"C# Strategy Design Pattern(Strateji Tasar\u0131m Deseni)"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>Merhaba,<\/p>\n<p>Behavioral Patterns(Davran\u0131\u015fsal Kal\u0131plar) kategorisine giren Strategy Design Pattern \u00fczerinde detayl\u0131 irdeleme ger\u00e7ekle\u015ftirelim. Bir i\u015flem i\u00e7in birden fazla farkl\u0131 y\u00f6ntemlerin uygulanabilece\u011fi durumlar mevcuttur. \u0130\u015fte bu tarz durumlarda hangi y\u00f6ntemin uygulanaca\u011f\u0131n\u0131, hangisinin devreye sokulaca\u011f\u0131n\u0131 Strategy Design Pattern ile ger\u00e7ekle\u015ftirebiliyoruz.<\/p>\n<p><a href=\"http:\/\/www.gencayyildiz.com\/blog\/c-strategy-design-patternstrateji-tasarim-deseni\/c-strategy-design-patternstrateji-tasarim-deseni\/\" rel=\"attachment wp-att-3982\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-3982\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/04\/C-Strategy-Design-PatternStrateji-Tasar\u0131m-Deseni.png\" alt=\"C# Strategy Design Pattern(Strateji Tasar\u0131m Deseni)\" width=\"510\" height=\"198\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/04\/C-Strategy-Design-PatternStrateji-Tasar\u0131m-Deseni.png 510w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/04\/C-Strategy-Design-PatternStrateji-Tasar\u0131m-Deseni-300x116.png 300w\" sizes=\"auto, (max-width: 510px) 100vw, 510px\" \/><\/a><\/p>\n<p>Diyagramda da g\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi bir i\u015flemi ger\u00e7ekle\u015ftirebilmenin &#8220;StrategyA&#8221;, &#8220;StrategyB&#8221; ve &#8220;StrategyC&#8221; isimli \u00fc\u00e7 adet y\u00f6ntemi mevcuttur. \u0130\u015flemimizi temsil eden Context s\u0131n\u0131f\u0131 ise a\u015fa\u011f\u0131 sat\u0131rlardaki\u00a0mant\u0131kla\u00a0Strategy Design Pattern&#8217;i uygulatma gereksinimi do\u011furmaktad\u0131r.<\/p>\n<p>Context, i\u015flemi hangi y\u00f6ntemle yapacaksa gidip ilgili y\u00f6ntem ad\u0131na Context&#8217;te g\u00fcncelleme ger\u00e7ekle\u015ftirmek zorunda kalacak e\u011fer tekrar de\u011fi\u015fiklik olacaksa tekrar Context i\u00e7eri\u011fiyle oynamam\u0131z gerekecektir. \u0130\u015fte bu durumda, her y\u00f6ntemi temsil edecek olan, daha do\u011frusu her y\u00f6nteme bir \u015fablon, aray\u00fcz i\u015flevi\u00a0g\u00f6recek olan Strategy aray\u00fcz\u00fc(interface ya da abstract class olabilir) tan\u0131mlanm\u0131\u015ft\u0131r. Bu aray\u00fcz bar\u0131nd\u0131rd\u0131\u011f\u0131 elemanlar\u00a0olarak t\u00fcm g\u00f6revleri stabilize etmekte\u00a0ve\u00a0miras durumunda kas\u0131tl\u0131 implement ger\u00e7ekle\u015ftirmekte\u00a0ve Context s\u0131n\u0131f\u0131 bu aray\u00fcz arac\u0131l\u0131\u011f\u0131yla i\u015flemlerini ger\u00e7ekle\u015ftirmektedir.<\/p>\n<p>Bu tasar\u0131m deseninde temel odak noktam\u0131z, Context&#8217;in i\u015flemin nas\u0131l yap\u0131laca\u011f\u0131yla ilgisini kesmektir.<\/p>\n<p>Gelin bir araba \u00fcretim fabrikas\u0131n\u0131 \u00f6rneklendirerek projemize pratiklik kazand\u0131ral\u0131m.<\/p>\n<p>\u00dcretilecek araba modelimiz &#8220;Opel&#8221; olsun.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    class Opel\r\n    {\r\n        public Opel(string UretimTipi)\r\n        {\r\n            Console.WriteLine($&quot;Opel {UretimTipi} \u00fcretilmi\u015ftir.&quot;);\r\n        }\r\n        public string Marka { get; set; }\r\n        public string Model { get; set; }\r\n        public int KM { get; set; }\r\n    }\r\n<\/pre>\n<p>&#8220;Seri \u00dcret&#8221;, &#8220;\u00d6zel Yap\u0131m \u00dcret&#8221; ve &#8220;\u015eipari\u015f \u00dczerine \u00dcret&#8221; olmak \u00fczere \u00fc\u00e7 adet \u00fcretim y\u00f6ntemimiz olsun.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    class SeriUret\r\n    {\r\n        public Opel Uret()\r\n        {\r\n            return new Opel(&quot;seri&quot;);\r\n        }\r\n    }\r\n<\/pre>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    class OzelYapimUret\r\n    {\r\n        public Opel Uret()\r\n        {\r\n            return new Opel(&quot;\u00f6zel yap\u0131m&quot;);\r\n        }\r\n    }\r\n<\/pre>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    class SiparisUzerineUret\r\n    {\r\n        public Opel Uret()\r\n        {\r\n            return new Opel(&quot;sipari\u015f \u00fczerine&quot;);\r\n        }\r\n    }\r\n<\/pre>\n<p>\u015eimdi Strategy Design Pattern olmaks\u0131z\u0131n ara\u00e7lar\u0131m\u0131z\u0131 \u00fcrettirelim.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    class Uretici\r\n    {\r\n        public Uretici()\r\n        {\r\n            SeriUret sUret = new SeriUret();\r\n            sUret.Uret();\r\n        }\r\n    }\r\n<\/pre>\n<p>G\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi manuel bir vaziyette &#8220;SeriUret&#8221; y\u00f6ntemiyle arac\u0131m\u0131z \u00fcretilmi\u015ftir.<br \/>\n\u00c7al\u0131\u015ft\u0131ral\u0131m&#8230;<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n        static void Main(string&#x5B;] args)\r\n        {\r\n            Uretici uret = new Uretici();\r\n            Console.Read();\r\n        }\r\n<\/pre>\n<p><a href=\"http:\/\/www.gencayyildiz.com\/blog\/c-strategy-design-patternstrateji-tasarim-deseni\/c-strategy-design-patternstrateji-tasarim-deseni-2\/\" rel=\"attachment wp-att-3983\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/04\/C-Strategy-Design-PatternStrateji-Tasar\u0131m-Deseni-1.png\" alt=\"C# Strategy Design Pattern(Strateji Tasar\u0131m Deseni)\" width=\"185\" height=\"15\" class=\"aligncenter size-full wp-image-3983\" \/><\/a><br \/>\nPeki! \u015eimdi i\u015flemimizi &#8220;SeriUret&#8221; y\u00f6ntemiyle de\u011fil &#8220;SiparisUzerineUret&#8221; isimli y\u00f6ntemle ger\u00e7ekle\u015ftirmek istiyorsam gidip &#8220;Uretici&#8221; s\u0131n\u0131f\u0131n\u0131n i\u00e7eri\u011fini a\u015fa\u011f\u0131daki gibi de\u011fi\u015ftirmem laz\u0131m.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    class Uretici\r\n    {\r\n        public Uretici()\r\n        {\r\n            SiparisUzerineUret suUret = new SiparisUzerineUret();\r\n            suUret.Uret();\r\n        }\r\n    }\r\n<\/pre>\n<p>G\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi, ben ne zaman farkl\u0131 bir y\u00f6nteme ge\u00e7meye \u00e7al\u0131\u015fsam bu &#8220;Uretici&#8221; s\u0131n\u0131f\u0131n\u0131 z\u0131rt p\u0131rt de\u011fi\u015ftirmekle m\u00fckellef olaca\u011f\u0131m i\u00e7in burada Strategy Design Pattern&#8217;i araya sokuyoruz.<\/p>\n<p>&#8220;Strategy&#8221; isimli abstract class\u0131(yahut interfacede olabilir) haz\u0131rl\u0131yorum.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    abstract class Strategy\r\n    {\r\n        public abstract Opel Uret();\r\n    }\r\n<\/pre>\n<p>T\u00fcm y\u00f6ntemlerimi bu soyut aray\u00fczden t\u00fcretiyorum.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    class SeriUret : Strategy\r\n    {\r\n        public override Opel Uret()\r\n        {\r\n            return new Opel(&quot;seri&quot;);\r\n        }\r\n    }\r\n<\/pre>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    class OzelYapimUret : Strategy\r\n    {\r\n        public override Opel Uret()\r\n        {\r\n            return new Opel(&quot;\u00f6zel yap\u0131m&quot;);\r\n        }\r\n    }\r\n<\/pre>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    class SiparisUzerineUret : Strategy\r\n    {\r\n        public override Opel Uret()\r\n        {\r\n            return new Opel(&quot;sipari\u015f \u00fczerine&quot;);\r\n        }\r\n    }\r\n<\/pre>\n<p>&#8220;Uretici&#8221; s\u0131n\u0131f\u0131n\u0131 a\u015fa\u011f\u0131daki gibi g\u00fcncelliyorum.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    class Uretici\r\n    {\r\n        public Uretici(Strategy Yontem)\r\n        {\r\n            Yontem.Uret();\r\n        }\r\n    }\r\n<\/pre>\n<p>Dikkat ederseniz e\u011fer &#8220;Uretici&#8221; s\u0131n\u0131f\u0131n\u0131n yani Context&#8217;imizin i\u015fi nas\u0131l ger\u00e7ekle\u015ftirece\u011fiyle ilgisi kesilerek, yap\u0131lacak i\u015flem Client&#8217;tan g\u00f6nderilerek Strategy \u015fablon tipinde elde edilerek i\u015flenmektedir.<\/p>\n<p>Kullan\u0131m olarak a\u015fa\u011f\u0131daki kod blo\u011funu inceleyeniz.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n        static void Main(string&#x5B;] args)\r\n        {\r\n            OzelYapimUret oyUret = new OzelYapimUret();\r\n            SeriUret sUret = new SeriUret();\r\n            SiparisUzerineUret suUret = new SiparisUzerineUret();\r\n            Uretici uret1 = new Uretici(oyUret);\r\n            Uretici uret2 = new Uretici(sUret);\r\n            Uretici uret3 = new Uretici(suUret);\r\n            Console.Read();\r\n        }\r\n<\/pre>\n<p><a href=\"http:\/\/www.gencayyildiz.com\/blog\/c-strategy-design-patternstrateji-tasarim-deseni\/c-strategy-design-patternstrateji-tasarim-deseni-3\/\" rel=\"attachment wp-att-3986\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/04\/C-Strategy-Design-PatternStrateji-Tasar\u0131m-Deseni-2.png\" alt=\"C# Strategy Design Pattern(Strateji Tasar\u0131m Deseni)\" width=\"286\" height=\"62\" class=\"aligncenter size-full wp-image-3986\" \/><\/a><\/p>\n<p>Bir Design Pattern makalesinin daha sonuna gelmi\u015f bulunmaktay\u0131z&#8230;<\/p>\n<p>Lakin, bitirmeden var olan bilgilerimizi \u00f6rg\u00fctlemek maksatl\u0131 bir hat\u0131rlatmada bulunmak maksad\u0131yla, Strategy Design Pattern&#8217;i uygularken <a href=\"http:\/\/www.gencayyildiz.com\/blog\/dependency-injection-nedir-nasil-uygulanir\/\" target=\"_blank\">Dependency Injection<\/a> yakla\u015f\u0131m\u0131n\u0131 sergiledi\u011fimize dikkat ettiniz mi? merak ediyorum do\u011frusu&#8230;<\/p>\n<p>\u0130sterseniz birde o g\u00f6zle yap\u0131lan i\u015flemleri tekrardan inceleyiniz&#8230; \ud83d\ude42<\/p>\n<p>Sonraki yaz\u0131lar\u0131mda g\u00f6r\u00fc\u015fmek \u00fczere&#8230;<br \/>\n\u0130yi \u00e7al\u0131\u015fmalar&#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, Behavioral Patterns(Davran\u0131\u015fsal Kal\u0131plar) kategorisine giren Strategy Design Pattern \u00fczerinde detayl\u0131 irdeleme ger\u00e7ekle\u015ftirelim. Bir i\u015flem i\u00e7in birden fazla farkl\u0131 y\u00f6ntemlerin uygulanabilece\u011fi durumlar mevcuttur. \u0130\u015fte bu tarz durumlarda hangi y\u00f6ntemin uygulanaca\u011f\u0131n\u0131, hangisinin devreye sokulaca\u011f\u0131n\u0131 Strategy&#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":3982,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[153],"tags":[1052,1053,946,1054,1055],"class_list":["post-3981","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-design-pattern","tag-behavioral-patterns","tag-davranissal-kaliplar","tag-dependency-injection","tag-strategy-design-pattern","tag-strateji-tasarim-deseni"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/3981","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=3981"}],"version-history":[{"count":0,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/3981\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media\/3982"}],"wp:attachment":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media?parent=3981"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=3981"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=3981"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}