[{"data":1,"prerenderedAt":1741},["ShallowReactive",2],{"post-\u002Ftr\u002Fmediator-tasarim-deseni-nedir":3},{"page":4,"translation":1585,"nav":1599,"related":1720,"random":1730},{"id":5,"title":6,"body":7,"categories":1583,"category":1585,"date":1586,"description":1587,"draft":1588,"extension":1589,"image":1590,"kind":1585,"lang":484,"meta":1591,"navigation":231,"path":1536,"readingTime":235,"seo":1592,"slug":1593,"stem":1594,"tags":1595,"translationKey":1585,"type":1584,"updated":1585,"__hash__":1598},"postsTr\u002Ftr\u002Fmediator-tasarim-deseni-nedir.md","Mediator Tasarım Deseni Nedir?",{"type":8,"value":9,"toc":1564},"minimark",[10,20,33,36,93,96,101,106,108,112,115,122,125,136,142,145,147,151,160,163,169,176,178,182,185,471,473,477,547,549,553,573,575,579,605,607,611,616,1069,1073,1398,1400,1404,1408,1411,1420,1424,1430,1434,1448,1450,1454,1459,1482,1487,1516,1521,1560],[11,12,13,14,19],"p",{},"Bu yazı ",[15,16,18],"a",{"href":17},"\u002Ftr\u002Fdesign-patterns-tasarim-desenleri-nedir","Design Patterns\u002FTasarım Desenleri Nedir?"," başlıklı yazı dizisinin bir parçasıdır.",[11,21,22,23,32],{},"Bu içerik ağırlıklı olarak ",[15,24,31],{"href":25,"rel":26,"target":30},"https:\u002F\u002Frefactoring.guru\u002Fdesign-patterns",[27,28,29],"nofollow","noopener","noreferrer","_blank","refactoring.guru"," sitesindeki içeriğin tercümesi ve derlenmesinden oluşturulmuştur.",[11,34,35],{},"Tüm tasarım desenleri ya da diğer adıyla tasarım kalıplarına yönelik ayrıntılı içeriklere yazının sonundaki bağlantılardan ulaşabilirsiniz.",[37,38,39,46],"blockquote",{},[11,40,41,42],{},"💡 ",[43,44,45],"strong",{},"Özet (TL;DR):",[47,48,49,61,82],"ul",{},[50,51,52,55,56,60],"li",{},[43,53,54],{},"Amaç:"," Birbiriyle etkileşen çok sayıda nesne arasındaki karmaşık ve doğrudan bağımlılıkları (coupling) azaltır. Nesneleri doğrudan haberleştirmek yerine tek bir aracı nesne (",[57,58,59],"code",{},"Mediator",") üzerinden konuşmaya zorlar.",[50,62,63,66,67,69,70,73,74,77,78,81],{},[43,64,65],{},"Kilit Yapılar:"," Arabulucu Arayüzü (",[57,68,59],{},"), Somut Arabulucu (",[57,71,72],{},"ConcreteMediator",") ve Bileşenler (",[57,75,76],{},"Components"," \u002F ",[57,79,80],{},"Colleagues",").",[50,83,84,87,88,92],{},[43,85,86],{},"Motto:"," ",[89,90,91],"em",{},"Don't talk to each other, talk to the Mediator"," (Birbirinizle konuşmayın, Arabulucu ile konuşun).",[94,95],"hr",{},[97,98,100],"h2",{"id":99},"mediator-tasarım-deseninin-amacı","Mediator Tasarım Deseninin Amacı",[11,102,103,105],{},[43,104,59],{}," (Arabulucu), nesneler arasındaki kaotik bağımlılıkları azaltmayı sağlayan davranışsal (behavioral) bir tasarım desenidir. Bu desen nesneler arasındaki doğrudan iletişimi sınırlar ve sadece aracı bir nesne üzerinden haberleşmelerini sağlar.",[94,107],{},[97,109,111],{"id":110},"sorun","Sorun",[11,113,114],{},"Uygulamanızda kullanıcı profilleri oluşturmak ve düzenlemek için büyük bir form pencereniz (dialog) olduğunu düşünelim. Form üzerinde metin alanları, onay kutuları (checkbox), butonlar gibi çok sayıda bileşen (UI element) bulunuyor.",[11,116,117],{},[118,119],"img",{"alt":120,"src":121},"Mediator tasarım deseni nedir","\u002Fimages\u002Fmediator-tasarim-deseni-nedir\u002Fmediator-tasarim-deseni-nedir.avif",[11,123,124],{},"Bileşenler geliştikçe aralarındaki etkileşim karmaşık bir hal alır:",[47,126,127,130,133],{},[50,128,129],{},"\"Bir evcil hayvanım var\" kutusu işaretlendiğinde, evcil hayvan adının girileceği gizli bir metin alanı açılmalıdır.",[50,131,132],{},"\"Gönder\" butonuna tıklandığında tüm form elemanlarındaki veriler doğrulanmalıdır (validation).",[50,134,135],{},"Doğrulama hatası varsa ilgili alanın rengi kırmızı olmalı ve hata mesajı gösterilmelidir.",[11,137,138],{},[118,139],{"alt":140,"src":141},"Mediator tasarım deseni örneği","\u002Fimages\u002Fmediator-tasarim-deseni-nedir\u002Fmediator-tasarim-deseni-ornekleri.avif",[11,143,144],{},"Eğer bu etkileşim mantığını doğrudan form bileşenlerinin (örneğin onay kutusu veya buton sınıflarının) içine yazarsanız, bu sınıfları başka formlarda tekrar kullanamazsınız. Çünkü onay kutusu sınıfı, formdaki gizli metin alanına sıkı sıkıya bağlı (tightly coupled) hale gelmiştir.",[94,146],{},[97,148,150],{"id":149},"çözüm","Çözüm",[11,152,153,156,157,159],{},[43,154,155],{},"Mediator deseni",", bileşenlerin birbiriyle doğrudan konuşmasını yasaklamayı önerir. Bileşenler doğrudan iletişim kurmak yerine, çağrıları ilgili yerlere dağıtan merkezi bir Arabulucu (",[57,158,59],{},") nesnesi ile konuşur.",[11,161,162],{},"Bizim örneğimizde diyalog penceresinin (formun) kendisi Mediator görevi görebilir. Formun içindeki tüm bileşenler sadece bu form nesnesine bildirim gönderir.",[11,164,165],{},[118,166],{"alt":167,"src":168},"Mediator tasarım deseni çözüm örneği","\u002Fimages\u002Fmediator-tasarim-deseni-nedir\u002Fmediator-tasarim-deseni-nasil-kullanilir.avif",[11,170,171,172,175],{},"Örneğin, gönder butonuna basıldığında buton kendi içine doğrulama kodları yazmaz. Sadece form sınıfına ",[89,173,174],{},"\"Bana tıklandı\""," bildirimi gönderir. Form sınıfı (Mediator) ise tüm elemanları kontrol edip gerekli akışı yönetir. Böylece buton sınıfı formdaki diğer elemanlardan tamamen bağımsızlaşır ve başka projelerde de kolayca kullanılabilir hale gelir.",[94,177],{},[97,179,181],{"id":180},"gerçek-hayat-senaryosu-havalimanı-kontrol-kulesi-air-traffic-control","Gerçek Hayat Senaryosu: Havalimanı Kontrol Kulesi (Air Traffic Control)",[11,183,184],{},"Havalimanına iniş ve kalkış yapan uçaklar, pistin uygunluğunu sorgulamak için birbirleriyle doğrudan iletişim kurmazlar. Tüm koordinasyon Kontrol Kulesi üzerinden sağlanır:",[186,187,192],"pre",{"className":188,"code":189,"language":190,"meta":191,"style":191},"language-php shiki shiki-themes github-light github-dark","\u002F\u002F 1. Arabulucu Arayüzü\ninterface ControlTower {\n    public function registerAircraft(Aircraft $aircraft): void;\n    public function sendMessage(string $message, Aircraft $sender): void;\n}\n\n\u002F\u002F 2. Bileşen Arayüzü\nabstract class Aircraft {\n    protected ControlTower $controlTower;\n    public string $flightNumber;\n\n    public function __construct(ControlTower $tower, string $flightNumber) {\n        $this->controlTower = $tower;\n        $this->flightNumber = $flightNumber;\n    }\n\n    abstract public function receive(string $message): void;\n}\n\n\u002F\u002F 3. Somut Arabulucu\nclass AirTrafficControlTower implements ControlTower {\n    private array $aircrafts = [];\n\n    public function registerAircraft(Aircraft $aircraft): void {\n        $this->aircrafts[$aircraft->flightNumber] = $aircraft;\n    }\n\n    public function sendMessage(string $message, Aircraft $sender): void {\n        foreach ($this->aircrafts as $aircraft) {\n            \u002F\u002F Mesajı gönderen uçak hariç diğer tüm uçaklara kule üzerinden bilgi verilir\n            if ($aircraft !== $sender) {\n                $aircraft->receive(\"Kule'den [{$sender->flightNumber}]: \" . $message);\n            }\n        }\n    }\n}\n\n\u002F\u002F 4. Somut Bileşen\nclass CommercialAircraft extends Aircraft {\n    public function send(string $message): void {\n        echo \"{$this->flightNumber} mesaj gönderiyor: {$message}\\n\";\n        $this->controlTower->sendMessage($message, $this);\n    }\n\n    public function receive(string $message): void {\n        echo \"{$this->flightNumber} mesajı aldı: {$message}\\n\";\n    }\n}\n","php","",[57,193,194,202,208,214,220,226,233,239,245,251,257,262,268,274,280,286,291,297,302,307,313,319,325,330,336,342,347,352,358,364,370,376,382,388,394,399,404,409,415,421,427,433,439,444,449,455,461,466],{"__ignoreMap":191},[195,196,199],"span",{"class":197,"line":198},"line",1,[195,200,201],{},"\u002F\u002F 1. Arabulucu Arayüzü\n",[195,203,205],{"class":197,"line":204},2,[195,206,207],{},"interface ControlTower {\n",[195,209,211],{"class":197,"line":210},3,[195,212,213],{},"    public function registerAircraft(Aircraft $aircraft): void;\n",[195,215,217],{"class":197,"line":216},4,[195,218,219],{},"    public function sendMessage(string $message, Aircraft $sender): void;\n",[195,221,223],{"class":197,"line":222},5,[195,224,225],{},"}\n",[195,227,229],{"class":197,"line":228},6,[195,230,232],{"emptyLinePlaceholder":231},true,"\n",[195,234,236],{"class":197,"line":235},7,[195,237,238],{},"\u002F\u002F 2. Bileşen Arayüzü\n",[195,240,242],{"class":197,"line":241},8,[195,243,244],{},"abstract class Aircraft {\n",[195,246,248],{"class":197,"line":247},9,[195,249,250],{},"    protected ControlTower $controlTower;\n",[195,252,254],{"class":197,"line":253},10,[195,255,256],{},"    public string $flightNumber;\n",[195,258,260],{"class":197,"line":259},11,[195,261,232],{"emptyLinePlaceholder":231},[195,263,265],{"class":197,"line":264},12,[195,266,267],{},"    public function __construct(ControlTower $tower, string $flightNumber) {\n",[195,269,271],{"class":197,"line":270},13,[195,272,273],{},"        $this->controlTower = $tower;\n",[195,275,277],{"class":197,"line":276},14,[195,278,279],{},"        $this->flightNumber = $flightNumber;\n",[195,281,283],{"class":197,"line":282},15,[195,284,285],{},"    }\n",[195,287,289],{"class":197,"line":288},16,[195,290,232],{"emptyLinePlaceholder":231},[195,292,294],{"class":197,"line":293},17,[195,295,296],{},"    abstract public function receive(string $message): void;\n",[195,298,300],{"class":197,"line":299},18,[195,301,225],{},[195,303,305],{"class":197,"line":304},19,[195,306,232],{"emptyLinePlaceholder":231},[195,308,310],{"class":197,"line":309},20,[195,311,312],{},"\u002F\u002F 3. Somut Arabulucu\n",[195,314,316],{"class":197,"line":315},21,[195,317,318],{},"class AirTrafficControlTower implements ControlTower {\n",[195,320,322],{"class":197,"line":321},22,[195,323,324],{},"    private array $aircrafts = [];\n",[195,326,328],{"class":197,"line":327},23,[195,329,232],{"emptyLinePlaceholder":231},[195,331,333],{"class":197,"line":332},24,[195,334,335],{},"    public function registerAircraft(Aircraft $aircraft): void {\n",[195,337,339],{"class":197,"line":338},25,[195,340,341],{},"        $this->aircrafts[$aircraft->flightNumber] = $aircraft;\n",[195,343,345],{"class":197,"line":344},26,[195,346,285],{},[195,348,350],{"class":197,"line":349},27,[195,351,232],{"emptyLinePlaceholder":231},[195,353,355],{"class":197,"line":354},28,[195,356,357],{},"    public function sendMessage(string $message, Aircraft $sender): void {\n",[195,359,361],{"class":197,"line":360},29,[195,362,363],{},"        foreach ($this->aircrafts as $aircraft) {\n",[195,365,367],{"class":197,"line":366},30,[195,368,369],{},"            \u002F\u002F Mesajı gönderen uçak hariç diğer tüm uçaklara kule üzerinden bilgi verilir\n",[195,371,373],{"class":197,"line":372},31,[195,374,375],{},"            if ($aircraft !== $sender) {\n",[195,377,379],{"class":197,"line":378},32,[195,380,381],{},"                $aircraft->receive(\"Kule'den [{$sender->flightNumber}]: \" . $message);\n",[195,383,385],{"class":197,"line":384},33,[195,386,387],{},"            }\n",[195,389,391],{"class":197,"line":390},34,[195,392,393],{},"        }\n",[195,395,397],{"class":197,"line":396},35,[195,398,285],{},[195,400,402],{"class":197,"line":401},36,[195,403,225],{},[195,405,407],{"class":197,"line":406},37,[195,408,232],{"emptyLinePlaceholder":231},[195,410,412],{"class":197,"line":411},38,[195,413,414],{},"\u002F\u002F 4. Somut Bileşen\n",[195,416,418],{"class":197,"line":417},39,[195,419,420],{},"class CommercialAircraft extends Aircraft {\n",[195,422,424],{"class":197,"line":423},40,[195,425,426],{},"    public function send(string $message): void {\n",[195,428,430],{"class":197,"line":429},41,[195,431,432],{},"        echo \"{$this->flightNumber} mesaj gönderiyor: {$message}\\n\";\n",[195,434,436],{"class":197,"line":435},42,[195,437,438],{},"        $this->controlTower->sendMessage($message, $this);\n",[195,440,442],{"class":197,"line":441},43,[195,443,285],{},[195,445,447],{"class":197,"line":446},44,[195,448,232],{"emptyLinePlaceholder":231},[195,450,452],{"class":197,"line":451},45,[195,453,454],{},"    public function receive(string $message): void {\n",[195,456,458],{"class":197,"line":457},46,[195,459,460],{},"        echo \"{$this->flightNumber} mesajı aldı: {$message}\\n\";\n",[195,462,464],{"class":197,"line":463},47,[195,465,285],{},[195,467,469],{"class":197,"line":468},48,[195,470,225],{},[94,472],{},[97,474,476],{"id":475},"mediator-vs-facade-vs-observer","Mediator vs Facade vs Observer",[478,479,480,497],"table",{},[481,482,483],"thead",{},[484,485,486,491,494],"tr",{},[487,488,490],"th",{"align":489},"left","Desen",[487,492,493],{"align":489},"Amaç",[487,495,496],{"align":489},"İletişim Yönü",[498,499,500,516,532],"tbody",{},[484,501,502,507,510],{},[503,504,505],"td",{"align":489},[43,506,59],{},[503,508,509],{"align":489},"Sıkı bağlı bileşenlerin iletişimini tek bir merkezde koordine etmek.",[503,511,512,515],{"align":489},[43,513,514],{},"Çift Yönlü:"," Bileşenler kuleye haber verir, kule bileşenleri yönetir.",[484,517,518,523,526],{},[503,519,520],{"align":489},[43,521,522],{},"Facade",[503,524,525],{"align":489},"Karmaşık bir alt sisteme basitleştirilmiş tek bir arayüz sunmak.",[503,527,528,531],{"align":489},[43,529,530],{},"Tek Yönlü:"," İstemci Facade'i çağırır, alt sistem Facade'den habersizdir.",[484,533,534,539,542],{},[503,535,536],{"align":489},[43,537,538],{},"Observer",[503,540,541],{"align":489},"Nesneler arasında dinamik, tek taraflı olay aboneliği kurmak.",[503,543,544,546],{"align":489},[43,545,530],{}," Yayıncı (Publisher) olay fırlatır, aboneler (Subscribers) dinler.",[94,548],{},[97,550,552],{"id":551},"uygulanabilirlik","Uygulanabilirlik",[47,554,555,561,567],{},[50,556,557,560],{},[43,558,559],{},"Sıkı Bağlı Sınıflar:"," Birbirine çok fazla bağımlı oldukları için değiştirilmesi ve bakımı zor olan bir grup sınıfınız olduğunda kullanın.",[50,562,563,566],{},[43,564,565],{},"Yeniden Kullanılamayan Bileşenler:"," Başka bileşenlere doğrudan bağımlı oldukları için farklı ekranlarda veya uygulamalarda tekrar kullanamadığınız sınıflar olduğunda kullanın.",[50,568,569,572],{},[43,570,571],{},"Alt Sınıf Enflasyonu:"," Sadece bileşenlerin etkileşim mantığını değiştirebilmek için sürekli yeni alt sınıflar (subclasses) oluşturmak zorunda kaldığınızda kullanın.",[94,574],{},[97,576,578],{"id":577},"diğer-tasarım-desenleri-ile-i̇lişkisi","Diğer Tasarım Desenleri ile İlişkisi",[47,580,581,589,596],{},[50,582,583,585,586,588],{},[43,584,59],{}," ve ",[43,587,522],{}," benzer görünse de Facade sadece alt sisteme giriş kapısı sunar (yeni işlev eklemez), Mediator ise bileşenlerin birbirleriyle konuşmasını organize eder.",[50,590,591,585,593,595],{},[43,592,59],{},[43,594,538],{}," sıklıkla birlikte kullanılır. Bileşenlerin arabulucuya olay bildirmesi için Observer tabanlı bir abonelik altyapısı kurulabilir.",[50,597,598,601,602,604],{},[43,599,600],{},"Chain of Responsibility",", gelen isteği sırayla işleyici zincirine aktarırken; ",[43,603,59],{}," doğrudan alıcı ve gönderici arasındaki bağları koparıp aracı olur.",[94,606],{},[97,608,610],{"id":609},"mediator-tasarım-deseni-kod-örnekleri","Mediator Tasarım Deseni Kod Örnekleri",[612,613,615],"h3",{"id":614},"örnek-php-kodu","Örnek PHP Kodu",[186,617,619],{"className":188,"code":618,"language":190,"meta":191,"style":191},"\u003C?php\n\nnamespace RefactoringGuru\\Mediator\\Conceptual;\n\ninterface Mediator\n{\n    public function notify(object $sender, string $event): void;\n}\n\nclass ConcreteMediator implements Mediator\n{\n    private Component1 $component1;\n    private Component2 $component2;\n\n    public function __construct(Component1 $c1, Component2 $c2)\n    {\n        $this->component1 = $c1;\n        $this->component1->setMediator($this);\n        $this->component2 = $c2;\n        $this->component2->setMediator($this);\n    }\n\n    public function notify(object $sender, string $event): void\n    {\n        if ($event === \"A\") {\n            echo \"Mediator A olayına tepki verdi ve şu işlemleri tetikledi:\\n\";\n            $this->component2->doC();\n        }\n\n        if ($event === \"D\") {\n            echo \"Mediator D olayına tepki verdi ve şu işlemleri tetikledi:\\n\";\n            $this->component1->doB();\n            $this->component2->doC();\n        }\n    }\n}\n\nclass BaseComponent\n{\n    protected ?Mediator $mediator = null;\n\n    public function __construct(?Mediator $mediator = null)\n    {\n        $this->mediator = $mediator;\n    }\n\n    public function setMediator(Mediator $mediator): void\n    {\n        $this->mediator = $mediator;\n    }\n}\n\nclass Component1 extends BaseComponent\n{\n    public function doA(): void\n    {\n        echo \"Bileşen 1, A işlemini yapıyor.\\n\";\n        $this->mediator->notify($this, \"A\");\n    }\n\n    public function doB(): void\n    {\n        echo \"Bileşen 1, B işlemini yapıyor.\\n\";\n    }\n}\n\nclass Component2 extends BaseComponent\n{\n    public function doC(): void\n    {\n        echo \"Bileşen 2, C işlemini yapıyor.\\n\";\n    }\n\n    public function doD(): void\n    {\n        echo \"Bileşen 2, D işlemini yapıyor.\\n\";\n        $this->mediator->notify($this, \"D\");\n    }\n}\n\n$c1 = new Component1();\n$c2 = new Component2();\n$mediator = new ConcreteMediator($c1, $c2);\n\necho \"İstemci A işlemini tetikliyor:\\n\";\n$c1->doA();\n\necho \"\\n\";\necho \"İstemci D işlemini tetikliyor:\\n\";\n$c2->doD();\n",[57,620,621,626,630,635,639,644,649,654,658,662,667,671,676,681,685,690,695,700,705,710,715,719,723,728,732,737,742,747,751,755,760,765,770,774,778,782,786,790,795,799,804,808,813,817,822,826,830,835,839,844,849,854,859,865,870,876,881,887,893,898,903,909,914,920,925,930,935,941,946,952,957,963,968,973,979,984,990,996,1001,1006,1011,1017,1023,1029,1034,1040,1046,1051,1057,1063],{"__ignoreMap":191},[195,622,623],{"class":197,"line":198},[195,624,625],{},"\u003C?php\n",[195,627,628],{"class":197,"line":204},[195,629,232],{"emptyLinePlaceholder":231},[195,631,632],{"class":197,"line":210},[195,633,634],{},"namespace RefactoringGuru\\Mediator\\Conceptual;\n",[195,636,637],{"class":197,"line":216},[195,638,232],{"emptyLinePlaceholder":231},[195,640,641],{"class":197,"line":222},[195,642,643],{},"interface Mediator\n",[195,645,646],{"class":197,"line":228},[195,647,648],{},"{\n",[195,650,651],{"class":197,"line":235},[195,652,653],{},"    public function notify(object $sender, string $event): void;\n",[195,655,656],{"class":197,"line":241},[195,657,225],{},[195,659,660],{"class":197,"line":247},[195,661,232],{"emptyLinePlaceholder":231},[195,663,664],{"class":197,"line":253},[195,665,666],{},"class ConcreteMediator implements Mediator\n",[195,668,669],{"class":197,"line":259},[195,670,648],{},[195,672,673],{"class":197,"line":264},[195,674,675],{},"    private Component1 $component1;\n",[195,677,678],{"class":197,"line":270},[195,679,680],{},"    private Component2 $component2;\n",[195,682,683],{"class":197,"line":276},[195,684,232],{"emptyLinePlaceholder":231},[195,686,687],{"class":197,"line":282},[195,688,689],{},"    public function __construct(Component1 $c1, Component2 $c2)\n",[195,691,692],{"class":197,"line":288},[195,693,694],{},"    {\n",[195,696,697],{"class":197,"line":293},[195,698,699],{},"        $this->component1 = $c1;\n",[195,701,702],{"class":197,"line":299},[195,703,704],{},"        $this->component1->setMediator($this);\n",[195,706,707],{"class":197,"line":304},[195,708,709],{},"        $this->component2 = $c2;\n",[195,711,712],{"class":197,"line":309},[195,713,714],{},"        $this->component2->setMediator($this);\n",[195,716,717],{"class":197,"line":315},[195,718,285],{},[195,720,721],{"class":197,"line":321},[195,722,232],{"emptyLinePlaceholder":231},[195,724,725],{"class":197,"line":327},[195,726,727],{},"    public function notify(object $sender, string $event): void\n",[195,729,730],{"class":197,"line":332},[195,731,694],{},[195,733,734],{"class":197,"line":338},[195,735,736],{},"        if ($event === \"A\") {\n",[195,738,739],{"class":197,"line":344},[195,740,741],{},"            echo \"Mediator A olayına tepki verdi ve şu işlemleri tetikledi:\\n\";\n",[195,743,744],{"class":197,"line":349},[195,745,746],{},"            $this->component2->doC();\n",[195,748,749],{"class":197,"line":354},[195,750,393],{},[195,752,753],{"class":197,"line":360},[195,754,232],{"emptyLinePlaceholder":231},[195,756,757],{"class":197,"line":366},[195,758,759],{},"        if ($event === \"D\") {\n",[195,761,762],{"class":197,"line":372},[195,763,764],{},"            echo \"Mediator D olayına tepki verdi ve şu işlemleri tetikledi:\\n\";\n",[195,766,767],{"class":197,"line":378},[195,768,769],{},"            $this->component1->doB();\n",[195,771,772],{"class":197,"line":384},[195,773,746],{},[195,775,776],{"class":197,"line":390},[195,777,393],{},[195,779,780],{"class":197,"line":396},[195,781,285],{},[195,783,784],{"class":197,"line":401},[195,785,225],{},[195,787,788],{"class":197,"line":406},[195,789,232],{"emptyLinePlaceholder":231},[195,791,792],{"class":197,"line":411},[195,793,794],{},"class BaseComponent\n",[195,796,797],{"class":197,"line":417},[195,798,648],{},[195,800,801],{"class":197,"line":423},[195,802,803],{},"    protected ?Mediator $mediator = null;\n",[195,805,806],{"class":197,"line":429},[195,807,232],{"emptyLinePlaceholder":231},[195,809,810],{"class":197,"line":435},[195,811,812],{},"    public function __construct(?Mediator $mediator = null)\n",[195,814,815],{"class":197,"line":441},[195,816,694],{},[195,818,819],{"class":197,"line":446},[195,820,821],{},"        $this->mediator = $mediator;\n",[195,823,824],{"class":197,"line":451},[195,825,285],{},[195,827,828],{"class":197,"line":457},[195,829,232],{"emptyLinePlaceholder":231},[195,831,832],{"class":197,"line":463},[195,833,834],{},"    public function setMediator(Mediator $mediator): void\n",[195,836,837],{"class":197,"line":468},[195,838,694],{},[195,840,842],{"class":197,"line":841},49,[195,843,821],{},[195,845,847],{"class":197,"line":846},50,[195,848,285],{},[195,850,852],{"class":197,"line":851},51,[195,853,225],{},[195,855,857],{"class":197,"line":856},52,[195,858,232],{"emptyLinePlaceholder":231},[195,860,862],{"class":197,"line":861},53,[195,863,864],{},"class Component1 extends BaseComponent\n",[195,866,868],{"class":197,"line":867},54,[195,869,648],{},[195,871,873],{"class":197,"line":872},55,[195,874,875],{},"    public function doA(): void\n",[195,877,879],{"class":197,"line":878},56,[195,880,694],{},[195,882,884],{"class":197,"line":883},57,[195,885,886],{},"        echo \"Bileşen 1, A işlemini yapıyor.\\n\";\n",[195,888,890],{"class":197,"line":889},58,[195,891,892],{},"        $this->mediator->notify($this, \"A\");\n",[195,894,896],{"class":197,"line":895},59,[195,897,285],{},[195,899,901],{"class":197,"line":900},60,[195,902,232],{"emptyLinePlaceholder":231},[195,904,906],{"class":197,"line":905},61,[195,907,908],{},"    public function doB(): void\n",[195,910,912],{"class":197,"line":911},62,[195,913,694],{},[195,915,917],{"class":197,"line":916},63,[195,918,919],{},"        echo \"Bileşen 1, B işlemini yapıyor.\\n\";\n",[195,921,923],{"class":197,"line":922},64,[195,924,285],{},[195,926,928],{"class":197,"line":927},65,[195,929,225],{},[195,931,933],{"class":197,"line":932},66,[195,934,232],{"emptyLinePlaceholder":231},[195,936,938],{"class":197,"line":937},67,[195,939,940],{},"class Component2 extends BaseComponent\n",[195,942,944],{"class":197,"line":943},68,[195,945,648],{},[195,947,949],{"class":197,"line":948},69,[195,950,951],{},"    public function doC(): void\n",[195,953,955],{"class":197,"line":954},70,[195,956,694],{},[195,958,960],{"class":197,"line":959},71,[195,961,962],{},"        echo \"Bileşen 2, C işlemini yapıyor.\\n\";\n",[195,964,966],{"class":197,"line":965},72,[195,967,285],{},[195,969,971],{"class":197,"line":970},73,[195,972,232],{"emptyLinePlaceholder":231},[195,974,976],{"class":197,"line":975},74,[195,977,978],{},"    public function doD(): void\n",[195,980,982],{"class":197,"line":981},75,[195,983,694],{},[195,985,987],{"class":197,"line":986},76,[195,988,989],{},"        echo \"Bileşen 2, D işlemini yapıyor.\\n\";\n",[195,991,993],{"class":197,"line":992},77,[195,994,995],{},"        $this->mediator->notify($this, \"D\");\n",[195,997,999],{"class":197,"line":998},78,[195,1000,285],{},[195,1002,1004],{"class":197,"line":1003},79,[195,1005,225],{},[195,1007,1009],{"class":197,"line":1008},80,[195,1010,232],{"emptyLinePlaceholder":231},[195,1012,1014],{"class":197,"line":1013},81,[195,1015,1016],{},"$c1 = new Component1();\n",[195,1018,1020],{"class":197,"line":1019},82,[195,1021,1022],{},"$c2 = new Component2();\n",[195,1024,1026],{"class":197,"line":1025},83,[195,1027,1028],{},"$mediator = new ConcreteMediator($c1, $c2);\n",[195,1030,1032],{"class":197,"line":1031},84,[195,1033,232],{"emptyLinePlaceholder":231},[195,1035,1037],{"class":197,"line":1036},85,[195,1038,1039],{},"echo \"İstemci A işlemini tetikliyor:\\n\";\n",[195,1041,1043],{"class":197,"line":1042},86,[195,1044,1045],{},"$c1->doA();\n",[195,1047,1049],{"class":197,"line":1048},87,[195,1050,232],{"emptyLinePlaceholder":231},[195,1052,1054],{"class":197,"line":1053},88,[195,1055,1056],{},"echo \"\\n\";\n",[195,1058,1060],{"class":197,"line":1059},89,[195,1061,1062],{},"echo \"İstemci D işlemini tetikliyor:\\n\";\n",[195,1064,1066],{"class":197,"line":1065},90,[195,1067,1068],{},"$c2->doD();\n",[612,1070,1072],{"id":1071},"örnek-python-kodu","Örnek Python Kodu",[186,1074,1078],{"className":1075,"code":1076,"language":1077,"meta":191,"style":191},"language-python shiki shiki-themes github-light github-dark","from __future__ import annotations\nfrom abc import ABC\n\nclass Mediator(ABC):\n    def notify(self, sender: object, event: str) -> None:\n        pass\n\n\nclass ConcreteMediator(Mediator):\n    def __init__(self, component1: Component1, component2: Component2) -> None:\n        self._component1 = component1\n        self._component1.mediator = self\n        self._component2 = component2\n        self._component2.mediator = self\n\n    def notify(self, sender: object, event: str) -> None:\n        if event == \"A\":\n            print(\"Mediator A olayına tepki verdi ve şu işlemleri tetikledi:\")\n            self._component2.do_c()\n        elif event == \"D\":\n            print(\"Mediator D olayına tepki verdi ve şu işlemleri tetikledi:\")\n            self._component1.do_b()\n            self._component2.do_c()\n\n\nclass BaseComponent:\n    def __init__(self, mediator: Mediator | None = None) -> None:\n        self._mediator = mediator\n\n    @property\n    def mediator(self) -> Mediator:\n        return self._mediator\n\n    @mediator.setter\n    def mediator(self, mediator: Mediator) -> None:\n        self._mediator = mediator\n\n\nclass Component1(BaseComponent):\n    def do_a(self) -> None:\n        print(\"Bileşen 1, A işlemini yapıyor.\")\n        self.mediator.notify(self, \"A\")\n\n    def do_b(self) -> None:\n        print(\"Bileşen 1, B işlemini yapıyor.\")\n\n\nclass Component2(BaseComponent):\n    def do_c(self) -> None:\n        print(\"Bileşen 2, C işlemini yapıyor.\")\n\n    def do_d(self) -> None:\n        print(\"Bileşen 2, D işlemini yapıyor.\")\n        self.mediator.notify(self, \"D\")\n\n\nif __name__ == \"__main__\":\n    c1 = Component1()\n    c2 = Component2()\n    mediator = ConcreteMediator(c1, c2)\n\n    print(\"İstemci A işlemini tetikliyor:\")\n    c1.do_a()\n\n    print(\"\\n\", end=\"\")\n\n    print(\"İstemci D işlemini tetikliyor:\")\n    c2.do_d()\n","python",[57,1079,1080,1085,1090,1094,1099,1104,1109,1113,1117,1122,1127,1132,1137,1142,1147,1151,1155,1160,1165,1170,1175,1180,1185,1189,1193,1197,1202,1207,1212,1216,1221,1226,1231,1235,1240,1245,1249,1253,1257,1262,1267,1272,1277,1281,1286,1291,1295,1299,1304,1309,1314,1318,1323,1328,1333,1337,1341,1346,1351,1356,1361,1365,1370,1375,1379,1384,1388,1393],{"__ignoreMap":191},[195,1081,1082],{"class":197,"line":198},[195,1083,1084],{},"from __future__ import annotations\n",[195,1086,1087],{"class":197,"line":204},[195,1088,1089],{},"from abc import ABC\n",[195,1091,1092],{"class":197,"line":210},[195,1093,232],{"emptyLinePlaceholder":231},[195,1095,1096],{"class":197,"line":216},[195,1097,1098],{},"class Mediator(ABC):\n",[195,1100,1101],{"class":197,"line":222},[195,1102,1103],{},"    def notify(self, sender: object, event: str) -> None:\n",[195,1105,1106],{"class":197,"line":228},[195,1107,1108],{},"        pass\n",[195,1110,1111],{"class":197,"line":235},[195,1112,232],{"emptyLinePlaceholder":231},[195,1114,1115],{"class":197,"line":241},[195,1116,232],{"emptyLinePlaceholder":231},[195,1118,1119],{"class":197,"line":247},[195,1120,1121],{},"class ConcreteMediator(Mediator):\n",[195,1123,1124],{"class":197,"line":253},[195,1125,1126],{},"    def __init__(self, component1: Component1, component2: Component2) -> None:\n",[195,1128,1129],{"class":197,"line":259},[195,1130,1131],{},"        self._component1 = component1\n",[195,1133,1134],{"class":197,"line":264},[195,1135,1136],{},"        self._component1.mediator = self\n",[195,1138,1139],{"class":197,"line":270},[195,1140,1141],{},"        self._component2 = component2\n",[195,1143,1144],{"class":197,"line":276},[195,1145,1146],{},"        self._component2.mediator = self\n",[195,1148,1149],{"class":197,"line":282},[195,1150,232],{"emptyLinePlaceholder":231},[195,1152,1153],{"class":197,"line":288},[195,1154,1103],{},[195,1156,1157],{"class":197,"line":293},[195,1158,1159],{},"        if event == \"A\":\n",[195,1161,1162],{"class":197,"line":299},[195,1163,1164],{},"            print(\"Mediator A olayına tepki verdi ve şu işlemleri tetikledi:\")\n",[195,1166,1167],{"class":197,"line":304},[195,1168,1169],{},"            self._component2.do_c()\n",[195,1171,1172],{"class":197,"line":309},[195,1173,1174],{},"        elif event == \"D\":\n",[195,1176,1177],{"class":197,"line":315},[195,1178,1179],{},"            print(\"Mediator D olayına tepki verdi ve şu işlemleri tetikledi:\")\n",[195,1181,1182],{"class":197,"line":321},[195,1183,1184],{},"            self._component1.do_b()\n",[195,1186,1187],{"class":197,"line":327},[195,1188,1169],{},[195,1190,1191],{"class":197,"line":332},[195,1192,232],{"emptyLinePlaceholder":231},[195,1194,1195],{"class":197,"line":338},[195,1196,232],{"emptyLinePlaceholder":231},[195,1198,1199],{"class":197,"line":344},[195,1200,1201],{},"class BaseComponent:\n",[195,1203,1204],{"class":197,"line":349},[195,1205,1206],{},"    def __init__(self, mediator: Mediator | None = None) -> None:\n",[195,1208,1209],{"class":197,"line":354},[195,1210,1211],{},"        self._mediator = mediator\n",[195,1213,1214],{"class":197,"line":360},[195,1215,232],{"emptyLinePlaceholder":231},[195,1217,1218],{"class":197,"line":366},[195,1219,1220],{},"    @property\n",[195,1222,1223],{"class":197,"line":372},[195,1224,1225],{},"    def mediator(self) -> Mediator:\n",[195,1227,1228],{"class":197,"line":378},[195,1229,1230],{},"        return self._mediator\n",[195,1232,1233],{"class":197,"line":384},[195,1234,232],{"emptyLinePlaceholder":231},[195,1236,1237],{"class":197,"line":390},[195,1238,1239],{},"    @mediator.setter\n",[195,1241,1242],{"class":197,"line":396},[195,1243,1244],{},"    def mediator(self, mediator: Mediator) -> None:\n",[195,1246,1247],{"class":197,"line":401},[195,1248,1211],{},[195,1250,1251],{"class":197,"line":406},[195,1252,232],{"emptyLinePlaceholder":231},[195,1254,1255],{"class":197,"line":411},[195,1256,232],{"emptyLinePlaceholder":231},[195,1258,1259],{"class":197,"line":417},[195,1260,1261],{},"class Component1(BaseComponent):\n",[195,1263,1264],{"class":197,"line":423},[195,1265,1266],{},"    def do_a(self) -> None:\n",[195,1268,1269],{"class":197,"line":429},[195,1270,1271],{},"        print(\"Bileşen 1, A işlemini yapıyor.\")\n",[195,1273,1274],{"class":197,"line":435},[195,1275,1276],{},"        self.mediator.notify(self, \"A\")\n",[195,1278,1279],{"class":197,"line":441},[195,1280,232],{"emptyLinePlaceholder":231},[195,1282,1283],{"class":197,"line":446},[195,1284,1285],{},"    def do_b(self) -> None:\n",[195,1287,1288],{"class":197,"line":451},[195,1289,1290],{},"        print(\"Bileşen 1, B işlemini yapıyor.\")\n",[195,1292,1293],{"class":197,"line":457},[195,1294,232],{"emptyLinePlaceholder":231},[195,1296,1297],{"class":197,"line":463},[195,1298,232],{"emptyLinePlaceholder":231},[195,1300,1301],{"class":197,"line":468},[195,1302,1303],{},"class Component2(BaseComponent):\n",[195,1305,1306],{"class":197,"line":841},[195,1307,1308],{},"    def do_c(self) -> None:\n",[195,1310,1311],{"class":197,"line":846},[195,1312,1313],{},"        print(\"Bileşen 2, C işlemini yapıyor.\")\n",[195,1315,1316],{"class":197,"line":851},[195,1317,232],{"emptyLinePlaceholder":231},[195,1319,1320],{"class":197,"line":856},[195,1321,1322],{},"    def do_d(self) -> None:\n",[195,1324,1325],{"class":197,"line":861},[195,1326,1327],{},"        print(\"Bileşen 2, D işlemini yapıyor.\")\n",[195,1329,1330],{"class":197,"line":867},[195,1331,1332],{},"        self.mediator.notify(self, \"D\")\n",[195,1334,1335],{"class":197,"line":872},[195,1336,232],{"emptyLinePlaceholder":231},[195,1338,1339],{"class":197,"line":878},[195,1340,232],{"emptyLinePlaceholder":231},[195,1342,1343],{"class":197,"line":883},[195,1344,1345],{},"if __name__ == \"__main__\":\n",[195,1347,1348],{"class":197,"line":889},[195,1349,1350],{},"    c1 = Component1()\n",[195,1352,1353],{"class":197,"line":895},[195,1354,1355],{},"    c2 = Component2()\n",[195,1357,1358],{"class":197,"line":900},[195,1359,1360],{},"    mediator = ConcreteMediator(c1, c2)\n",[195,1362,1363],{"class":197,"line":905},[195,1364,232],{"emptyLinePlaceholder":231},[195,1366,1367],{"class":197,"line":911},[195,1368,1369],{},"    print(\"İstemci A işlemini tetikliyor:\")\n",[195,1371,1372],{"class":197,"line":916},[195,1373,1374],{},"    c1.do_a()\n",[195,1376,1377],{"class":197,"line":922},[195,1378,232],{"emptyLinePlaceholder":231},[195,1380,1381],{"class":197,"line":927},[195,1382,1383],{},"    print(\"\\n\", end=\"\")\n",[195,1385,1386],{"class":197,"line":932},[195,1387,232],{"emptyLinePlaceholder":231},[195,1389,1390],{"class":197,"line":937},[195,1391,1392],{},"    print(\"İstemci D işlemini tetikliyor:\")\n",[195,1394,1395],{"class":197,"line":943},[195,1396,1397],{},"    c2.do_d()\n",[94,1399],{},[97,1401,1403],{"id":1402},"sıkça-sorulan-sorular-faq","Sıkça Sorulan Sorular (FAQ)",[612,1405,1407],{"id":1406},"mediator-sınıfının-zamanla-god-class-aşırı-yüklenmiş-sınıf-haline-gelmesi-nasıl-engellenir","Mediator sınıfının zamanla \"God Class\" (Aşırı Yüklenmiş Sınıf) haline gelmesi nasıl engellenir?",[11,1409,1410],{},"Eğer sistemdeki tüm iş mantığı ve nesne etkileşimleri tek bir Mediator sınıfının içine yığılır ve kontrol edilmezse, Mediator devasa ve bakımı imkansız bir \"God Class\" haline gelebilir. Bunu engellemek için:",[1412,1413,1414,1417],"ol",{},[50,1415,1416],{},"Sadece koordinasyon kodları Mediator'de kalmalı, asıl iş mantığı bileşenlerin içinde kalmalıdır.",[50,1418,1419],{},"Formlar\u002Fdiyaloglar büyüdükçe hiyerarşik veya alt Mediator'lar (sub-mediators) tanımlanmalıdır.",[612,1421,1423],{"id":1422},"mediator-ile-observer-desenleri-hangi-durumlarda-birlikte-kullanılır","Mediator ile Observer desenleri hangi durumlarda birlikte kullanılır?",[11,1425,1426,1427,1429],{},"Bileşenlerin Mediator'e bildirim göndermesi için genellikle ",[43,1428,538],{}," deseni kullanılır. Bileşenler birer yayıncı (publisher) gibi davranır ve kendi durum değişikliklerini fırlatır. Mediator ise bu bileşenleri dinleyen tek bir abone (subscriber) rolündedir. Bildirimi alan Mediator gerekli koordinasyon işlemlerini yürütür.",[612,1431,1433],{"id":1432},"mediator-kullanmanın-dezavantajları-nelerdir","Mediator kullanmanın dezavantajları nelerdir?",[47,1435,1436,1442],{},[50,1437,1438,1441],{},[43,1439,1440],{},"Merkezi Karmaşıklık:"," Tüm ilişkiler tek bir sınıfta toplandığı için Mediator sınıfı karmaşıklaşabilir.",[50,1443,1444,1447],{},[43,1445,1446],{},"Hata Ayıklama (Debugging) Zorluğu:"," Nesneler arasındaki doğrudan bağlar koptuğu için, bir olayın tetiklediği zincirleme reaksiyonları takip etmek ve debug etmek zorlaşabilir.",[94,1449],{},[97,1451,1453],{"id":1452},"diğer-tasarım-kalıplarıdesign-patterns","Diğer Tasarım Kalıpları\u002FDesign Patterns",[11,1455,1456],{},[43,1457,1458],{},"Oluşumsal Kalıplar (Creational Patterns)",[11,1460,1461,1465,1466,1465,1470,1465,1474,1465,1478],{},[15,1462,1464],{"href":1463},"\u002Ftr\u002Ftasarim-kaliplari-design-patterns-factory-method-nedir","Factory Method",",\n",[15,1467,1469],{"href":1468},"\u002Ftr\u002Ftasarim-kaliplari-design-patterns-abstract-factory-nedir","Abstract Factory",[15,1471,1473],{"href":1472},"\u002Ftr\u002Fbuilder-tasarim-deseni-nedir","Builder",[15,1475,1477],{"href":1476},"\u002Ftr\u002Fprototype-tasarim-deseni-nedir","Prototype",[15,1479,1481],{"href":1480},"\u002Ftr\u002Fsingleton-tasarim-deseni-nedir","Singleton",[11,1483,1484],{},[43,1485,1486],{},"Yapısal Kalıplar (Structural Patterns)",[11,1488,1489,1465,1493,1465,1497,1465,1501,1465,1505,1465,1508,1465,1512],{},[15,1490,1492],{"href":1491},"\u002Ftr\u002Fadapter-tasarim-deseni-nedir","Adapter",[15,1494,1496],{"href":1495},"\u002Ftr\u002Fbridge-tasarim-deseni-nedir","Bridge",[15,1498,1500],{"href":1499},"\u002Ftr\u002Fcomposite-tasarim-deseni-nedir","Composite",[15,1502,1504],{"href":1503},"\u002Ftr\u002Fdecorator-tasarim-deseni-nedir","Decorator",[15,1506,522],{"href":1507},"\u002Ftr\u002Ffacade-tasarim-deseni-nedir",[15,1509,1511],{"href":1510},"\u002Ftr\u002Fflyweight-tasarim-deseni-nedir","Flyweight",[15,1513,1515],{"href":1514},"\u002Ftr\u002Fproxy-tasarim-deseni-nedir","Proxy",[11,1517,1518],{},[43,1519,1520],{},"Davranışsal Kalıplar (Behavioral Patterns)",[11,1522,1523,1465,1526,1465,1530,1465,1534,1465,1537,1465,1541,1465,1544,1465,1548,1465,1552,1465,1556],{},[15,1524,600],{"href":1525},"\u002Ftr\u002Fchain-of-responsibility-deseni-nedir",[15,1527,1529],{"href":1528},"\u002Ftr\u002Fcommand-tasarim-deseni-nedir","Command",[15,1531,1533],{"href":1532},"\u002Ftr\u002Fiterator-tasarim-deseni-nedir","Iterator",[15,1535,59],{"href":1536},"\u002Ftr\u002Fmediator-tasarim-deseni-nedir",[15,1538,1540],{"href":1539},"\u002Ftr\u002Fmemento-tasarim-deseni-nedir","Memento",[15,1542,538],{"href":1543},"\u002Ftr\u002Fobserver-tasarim-deseni-nedir",[15,1545,1547],{"href":1546},"\u002Ftr\u002Fstate-tasarim-deseni-nedir","State",[15,1549,1551],{"href":1550},"\u002Ftr\u002Fstrategy-tasarim-deseni-nedir","Strategy",[15,1553,1555],{"href":1554},"\u002Ftr\u002Ftemplate-method-tasarim-deseni-nedir","Template Method",[15,1557,1559],{"href":1558},"\u002Ftr\u002Fvisitor-tasarim-deseni-nedir","Visitor",[1561,1562,1563],"style",{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":191,"searchDepth":204,"depth":204,"links":1565},[1566,1567,1568,1569,1570,1571,1572,1573,1577,1582],{"id":99,"depth":204,"text":100},{"id":110,"depth":204,"text":111},{"id":149,"depth":204,"text":150},{"id":180,"depth":204,"text":181},{"id":475,"depth":204,"text":476},{"id":551,"depth":204,"text":552},{"id":577,"depth":204,"text":578},{"id":609,"depth":204,"text":610,"children":1574},[1575,1576],{"id":614,"depth":210,"text":615},{"id":1071,"depth":210,"text":1072},{"id":1402,"depth":204,"text":1403,"children":1578},[1579,1580,1581],{"id":1406,"depth":210,"text":1407},{"id":1422,"depth":210,"text":1423},{"id":1432,"depth":210,"text":1433},{"id":1452,"depth":204,"text":1453},[1584],"technical",null,"2021-10-03","Mediator (Arabulucu) tasarım kalıbını, gevşek bağlılığı (loose coupling), kontrol kulesi senaryolarını ve PHP\u002FPython örneklerini öğrenin.",false,"md","\u002Fimages\u002Fposts\u002F2021\u002F10\u002Fmediator-tasarim-deseni.avif",{},{"title":6,"description":1587},"mediator-tasarim-deseni-nedir","tr\u002Fmediator-tasarim-deseni-nedir",[1596,1597],"design-pattern","ipucu","jdc-rm5E9lvrz8gKeIusUi4GgAdTokJdHP_Taa88MlM",{"prev":1600,"next":1602,"others":1604,"lucky":1717,"readingTime":235},{"path":1539,"title":1601},"Memento Tasarım Deseni Nedir?",{"path":1532,"title":1603},"Iterator Tasarım Deseni Nedir?",[1605,1608,1611,1614,1617,1620,1623,1625,1628,1631,1634,1637,1640,1641,1644,1647,1650,1653,1656,1659,1662,1665,1668,1670,1673,1675,1677,1680,1683,1686,1689,1692,1695,1698,1701,1704,1707,1709,1711,1714],{"path":1606,"title":1607},"\u002Ftr\u002Fdocker-nedir","Docker Nedir?",{"path":1609,"title":1610},"\u002Ftr\u002Fubuntu-20-04-uzerinde-cyberpanel-kurulumu","Ubuntu 20.04 üzerinde CyberPanel kurulumu",{"path":1612,"title":1613},"\u002Ftr\u002Frest-api-dokumantasyonu-nasil-yapilir","REST Api Dokümantasyonu Nasıl Oluşturulur?",{"path":1615,"title":1616},"\u002Ftr\u002Fmerhaba-gluster","Merhaba Gluster: Dağıtık Dosya Sistemi Nedir?",{"path":1618,"title":1619},"\u002Ftr\u002Fes15-nedir-ecmascript-2024-nedir","ES15 nedir? ECMAScript 2024 nedir?",{"path":1621,"title":1622},"\u002Ftr\u002Frabbitmq-nedir","RabbitMQ Nedir?",{"path":1503,"title":1624},"Decorator Tasarım Deseni Nedir?",{"path":1626,"title":1627},"\u002Ftr\u002Frestful-api-bilesenleri","RESTful API Bileşenleri",{"path":1629,"title":1630},"\u002Ftr\u002Fphp-ve-makine-ogrenimi-php-ml-kutuphanesi","PHP ve Makine Öğrenimi: PHP-ML Kütüphanesi ile Pratik Çözümler",{"path":1632,"title":1633},"\u002Ftr\u002Fgraylog-nedir-docker-ile-nasil-kurulur","Graylog Nedir? Docker Compose ile Adım Adım Kurulum Rehberi",{"path":1635,"title":1636},"\u002Ftr\u002Fes16-nedir-ecmascript-2025-nedir","ES16 nedir? ECMAScript 2025 nedir?",{"path":1638,"title":1639},"\u002Ftr\u002Fapi-gateway-nedir","API Gateway Nedir? Ne İşe Yarar?",{"path":1539,"title":1601},{"path":1642,"title":1643},"\u002Ftr\u002Fes7-nedir-ecmascript-2016-nedir","ES7 Nedir? ECMAScript 2016 Nedir?",{"path":1645,"title":1646},"\u002Ftr\u002Fdocker-swarm-nedir","Docker Swarm Nedir?",{"path":1648,"title":1649},"\u002Ftr\u002Ftricolor-garbage-collection-algoritmasi-nedir","Tricolor Garbage Collection Algoritması Nedir?",{"path":1651,"title":1652},"\u002Ftr\u002Ftemiz-moduler-ve-yeniden-kullanilabilir-php-kodu-yazma-rehberi","PHP'de Temiz, Modüler ve Yeniden Kullanılabilir Kod Yazma Rehberi",{"path":1654,"title":1655},"\u002Ftr\u002Fgoda-iota-nedir-iota-ne-zaman-ve-nerede-kullanilir","Go'da iota Nedir? iota Ne Zaman ve Nerede Kullanılır?",{"path":1657,"title":1658},"\u002Ftr\u002Fes14-nedir-ecmascript-2023-nedir","ES14 nedir? ECMAScript 2023 nedir?",{"path":1660,"title":1661},"\u002Ftr\u002Fgo-veri-tipleri-map","Go Veri Tipleri - Map",{"path":1663,"title":1664},"\u002Ftr\u002Fes6-nedir-ecmascript-2015-nedir","ES6 Nedir? ECMAScript 2015 Nedir?",{"path":1666,"title":1667},"\u002Ftr\u002Fwebpack-nedir","Webpack Nedir? Modern JavaScript Paketleyici Ekosistemi",{"path":1491,"title":1669},"Adapter Tasarım Deseni Nedir?",{"path":1671,"title":1672},"\u002Ftr\u002Ftailwind-css-just-in-time-modu","Tailwind CSS Just-in-Time (JIT) Modu Nedir?",{"path":1558,"title":1674},"Visitor Tasarım Deseni Nedir?",{"path":1550,"title":1676},"Strategy Tasarım Deseni Nedir?",{"path":1678,"title":1679},"\u002Ftr\u002Frest-api-guvenligi-nasil-saglanir","REST Api Güvenliği Nasıl Sağlanır?",{"path":1681,"title":1682},"\u002Ftr\u002Fgo-veri-tipleri-struct","Go Veri Tipleri: Struct",{"path":1684,"title":1685},"\u002Ftr\u002Frest-api-tasarimi","REST API Tasarım İncelikleri",{"path":1687,"title":1688},"\u002Ftr\u002Fheadless-wordpress-hakkinda-her-sey","Headless WordPress Hakkında Her Şey",{"path":1690,"title":1691},"\u002Ftr\u002Fes8-nedir-ecmascript-2017-nedir","ES8 Nedir? ECMAScript 2017 Nedir?",{"path":1693,"title":1694},"\u002Ftr\u002Frest-api-hata-yonetimi","REST Api Hata Yönetimi",{"path":1696,"title":1697},"\u002Ftr\u002Fmerhabadunya","Merhaba Dünya",{"path":1699,"title":1700},"\u002Ftr\u002Ffull-stack-proje-gelistiriyoruz","Full Stack Proje Geliştiriyoruz",{"path":1702,"title":1703},"\u002Ftr\u002Fvue-3-hakkinda-bilmeniz-gerekenler-yenilikler","Vue 3 Hakkında Bilmeniz Gerekenler ve Yenilikler",{"path":1705,"title":1706},"\u002Ftr\u002Fmutable-ve-immutable-kavrami","Mutable ve Immutable Kavramları Nedir?",{"path":1546,"title":1708},"State Tasarım Deseni Nedir?",{"path":1480,"title":1710},"Singleton Tasarım Deseni Nedir?",{"path":1712,"title":1713},"\u002Ftr\u002Fdocker-ile-mariadb-kurulumu","Docker ile MariaDB Kurulumu",{"path":1715,"title":1716},"\u002Ftr\u002Fdocker-ile-redis-kurulumu","Docker ile Redis Kurulumu",{"path":1718,"title":1719},"\u002Ftr\u002Fes9-nedir-ecmascript-2018-nedir","ES9 Nedir? ECMAScript 2018 Nedir?",[1721,1723,1726,1728],{"path":1558,"title":1674,"date":1722},"2021-10-09",{"path":1554,"title":1724,"date":1725},"Template Method Tasarım Deseni Nedir?","2021-10-08",{"path":1550,"title":1676,"date":1727},"2021-10-07",{"path":1546,"title":1708,"date":1729},"2021-10-06",[1731,1735,1739],{"path":1732,"title":1733,"date":1734},"\u002Ftr\u002Fphp-8-0-yenilikler","Merhaba PHP 8: Modern PHP 8.x Çağı","2020-12-09",{"path":1736,"title":1737,"date":1738},"\u002Ftr\u002Froot-yetkisi-olmayan-kullanici-ssh-baglantisini-ssh-baglantisini-ssh-anahtari-ile-nasil-kurabilir","Root yetkisi olmayan kullanıcı, SSH bağlantısını, SSH anahtarı ile nasıl kurabilir?","2021-02-20",{"path":1651,"title":1652,"date":1740},"2023-01-17",1782142005011]