[{"data":1,"prerenderedAt":1082},["ShallowReactive",2],{"post-\u002Ftr\u002Ffactory-method-ve-abstract-factory-farki-nedir":3},{"page":4,"translation":912,"nav":927,"related":1056,"random":1071},{"id":5,"title":6,"body":7,"categories":910,"category":912,"date":913,"description":914,"draft":915,"extension":916,"image":917,"kind":912,"lang":811,"meta":918,"navigation":102,"path":919,"readingTime":112,"seo":920,"slug":921,"stem":922,"tags":923,"translationKey":912,"type":911,"updated":912,"__hash__":926},"postsTr\u002Ftr\u002Ffactory-method-ve-abstract-factory-farki-nedir.md","Factory Method ve Abstract Factory Farkı Nedir?",{"type":8,"value":9,"toc":903},"minimark",[10,43,60,63,68,80,167,169,173,192,441,443,447,454,476,797,799,804,884,886,891,899],[11,12,13,21],"blockquote",{},[14,15,16,17],"p",{},"💡 ",[18,19,20],"strong",{},"Özet (TL;DR):",[22,23,24,31,37],"ul",{},[25,26,27,30],"li",{},[18,28,29],{},"Factory Method:"," Bir nesnenin nasıl oluşturulacağını alt sınıflara (subclasses) bırakır. Tek bir ürün (örneğin sadece Phone) oluşturmak için kullanılır.",[25,32,33,36],{},[18,34,35],{},"Abstract Factory:"," Birbirleriyle ilişkili veya bağımlı nesne ailelerini (örneğin AndroidPhone + AndroidTablet veya IosPhone + IosTablet) somut sınıflarını belirtmeden oluşturmak için bir arayüz sağlar.",[25,38,39,42],{},[18,40,41],{},"Temel Fark:"," Factory Method sınıf düzeyinde kalıtım (inheritance) kullanırken, Abstract Factory nesne kompozisyonu (composition) üzerinden çalışır ve birden fazla ilişkili ürünü tek bir fabrikada gruplar.",[14,44,45,50,51,55,56,59],{},[46,47,49],"a",{"href":48},"\u002Ftr\u002Ftasarim-kaliplari-design-patterns-abstract-factory-nedir","Tasarım desenleri"," yazı dizisinin başlangıcında yer alan ",[46,52,54],{"href":53},"\u002Ftr\u002Ftasarim-kaliplari-design-patterns-factory-method-nedir","Factory Method"," ve ",[46,57,58],{"href":48},"Abstract Factory"," yazılarından sonra, bu ikisi arasındaki farkı basit kodlarla biraz daha açmaya karar verdim. Kodu sadece PHP olarak paylaşacağım fakat PHP kullanmasanız bile bu kalıplar arasındaki ayrımı yapabilmek için yeterli olacaktır.",[61,62],"hr",{},[64,65,67],"h2",{"id":66},"_1-basit-fabrika-simple-factory","1. Basit Fabrika (Simple Factory)",[14,69,70,71,75,76,79],{},"Simple Factory'de yapılacak iş ve ihtiyaç bellidir. İstemci kodumuz içerisinde doğrudan parametreye göre veya özel metotlarla (örneğin ",[72,73,74],"code",{},"createAndroid()"," ya da ",[72,77,78],{},"createIos()",") nesneleri üretiriz.",[81,82,87],"pre",{"className":83,"code":84,"language":85,"meta":86,"style":86},"language-php shiki shiki-themes github-light github-dark","\u003C?php\n\nclass PhoneFactory {\n    public function createAndroid(): AndroidPhone\n    {\n        return new AndroidPhone();\n    }\n\n    public function createIos(): IosPhone\n    {\n        return new IosPhone();\n    }\n}\n","php","",[72,88,89,97,104,110,116,122,128,134,139,145,150,156,161],{"__ignoreMap":86},[90,91,94],"span",{"class":92,"line":93},"line",1,[90,95,96],{},"\u003C?php\n",[90,98,100],{"class":92,"line":99},2,[90,101,103],{"emptyLinePlaceholder":102},true,"\n",[90,105,107],{"class":92,"line":106},3,[90,108,109],{},"class PhoneFactory {\n",[90,111,113],{"class":92,"line":112},4,[90,114,115],{},"    public function createAndroid(): AndroidPhone\n",[90,117,119],{"class":92,"line":118},5,[90,120,121],{},"    {\n",[90,123,125],{"class":92,"line":124},6,[90,126,127],{},"        return new AndroidPhone();\n",[90,129,131],{"class":92,"line":130},7,[90,132,133],{},"    }\n",[90,135,137],{"class":92,"line":136},8,[90,138,103],{"emptyLinePlaceholder":102},[90,140,142],{"class":92,"line":141},9,[90,143,144],{},"    public function createIos(): IosPhone\n",[90,146,148],{"class":92,"line":147},10,[90,149,121],{},[90,151,153],{"class":92,"line":152},11,[90,154,155],{},"        return new IosPhone();\n",[90,157,159],{"class":92,"line":158},12,[90,160,133],{},[90,162,164],{"class":92,"line":163},13,[90,165,166],{},"}\n",[61,168],{},[64,170,172],{"id":171},"_2-fabrika-metodu-factory-method","2. Fabrika Metodu (Factory Method)",[14,174,175,176,179,180,183,184,187,188,191],{},"Factory Method deseninde nesne oluşturma mantığı alt sınıflara devredilir. İstemci kodumuz, ",[72,177,178],{},"PhonePicker"," soyut sınıfından türetilen ",[72,181,182],{},"AndroidPicker"," veya ",[72,185,186],{},"IosPicker"," sınıflarının ",[72,189,190],{},"selectPhone()"," metodunu kullanarak istediği nesneyi kolayca alabilir. İstemci kod mantığı içinde iOS ya da Android seçimine bağlı olarak uygun picker sınıfı çağrılır. Yarın bir başka telefon türü eklemek istersek mevcut kodları bozmadan sistemi genişletmek çok daha kolay olacaktır.",[81,193,195],{"className":83,"code":194,"language":85,"meta":86,"style":86},"\u003C?php\n\ninterface Phone {\n    public function getType(): string;\n}\n\nclass AndroidPhone implements Phone {\n    public function getType(): string {\n        return 'Android Phone';\n    }\n}\n\nclass IosPhone implements Phone {\n    public function getType(): string {\n        return 'iOS Phone';\n    }\n}\n\n\u002F\u002F Bir telefon seçip telefonun tipini ekrana yazarak telefon nesnesini döndüren soyut sınıf\nabstract class PhonePicker {\n    abstract public function createPhone(): Phone;\n\n    public function selectPhone(): Phone\n    {\n        $phone = $this->createPhone();\n        print 'Your selected phone is an ' . $phone->getType();\n        \n        \u002F\u002F Diğer işlemler (kayıt defterine kaydetme vb.) buraya gelebilir.\n        \n        return $phone;\n    }\n}\n\n\u002F\u002F Fabrika metodunu uygulayan somut seçici sınıflar\nclass AndroidPicker extends PhonePicker\n{\n    public function createPhone(): Phone {\n        return new AndroidPhone();\n    }  \n}\n\nclass IosPicker extends PhonePicker\n{\n    public function createPhone(): Phone {\n        return new IosPhone();\n    }  \n}\n",[72,196,197,201,205,210,215,219,223,228,233,238,242,246,250,255,260,266,271,276,281,287,293,299,304,310,315,321,327,333,339,344,350,355,360,365,371,377,383,389,394,400,405,410,416,421,426,431,436],{"__ignoreMap":86},[90,198,199],{"class":92,"line":93},[90,200,96],{},[90,202,203],{"class":92,"line":99},[90,204,103],{"emptyLinePlaceholder":102},[90,206,207],{"class":92,"line":106},[90,208,209],{},"interface Phone {\n",[90,211,212],{"class":92,"line":112},[90,213,214],{},"    public function getType(): string;\n",[90,216,217],{"class":92,"line":118},[90,218,166],{},[90,220,221],{"class":92,"line":124},[90,222,103],{"emptyLinePlaceholder":102},[90,224,225],{"class":92,"line":130},[90,226,227],{},"class AndroidPhone implements Phone {\n",[90,229,230],{"class":92,"line":136},[90,231,232],{},"    public function getType(): string {\n",[90,234,235],{"class":92,"line":141},[90,236,237],{},"        return 'Android Phone';\n",[90,239,240],{"class":92,"line":147},[90,241,133],{},[90,243,244],{"class":92,"line":152},[90,245,166],{},[90,247,248],{"class":92,"line":158},[90,249,103],{"emptyLinePlaceholder":102},[90,251,252],{"class":92,"line":163},[90,253,254],{},"class IosPhone implements Phone {\n",[90,256,258],{"class":92,"line":257},14,[90,259,232],{},[90,261,263],{"class":92,"line":262},15,[90,264,265],{},"        return 'iOS Phone';\n",[90,267,269],{"class":92,"line":268},16,[90,270,133],{},[90,272,274],{"class":92,"line":273},17,[90,275,166],{},[90,277,279],{"class":92,"line":278},18,[90,280,103],{"emptyLinePlaceholder":102},[90,282,284],{"class":92,"line":283},19,[90,285,286],{},"\u002F\u002F Bir telefon seçip telefonun tipini ekrana yazarak telefon nesnesini döndüren soyut sınıf\n",[90,288,290],{"class":92,"line":289},20,[90,291,292],{},"abstract class PhonePicker {\n",[90,294,296],{"class":92,"line":295},21,[90,297,298],{},"    abstract public function createPhone(): Phone;\n",[90,300,302],{"class":92,"line":301},22,[90,303,103],{"emptyLinePlaceholder":102},[90,305,307],{"class":92,"line":306},23,[90,308,309],{},"    public function selectPhone(): Phone\n",[90,311,313],{"class":92,"line":312},24,[90,314,121],{},[90,316,318],{"class":92,"line":317},25,[90,319,320],{},"        $phone = $this->createPhone();\n",[90,322,324],{"class":92,"line":323},26,[90,325,326],{},"        print 'Your selected phone is an ' . $phone->getType();\n",[90,328,330],{"class":92,"line":329},27,[90,331,332],{},"        \n",[90,334,336],{"class":92,"line":335},28,[90,337,338],{},"        \u002F\u002F Diğer işlemler (kayıt defterine kaydetme vb.) buraya gelebilir.\n",[90,340,342],{"class":92,"line":341},29,[90,343,332],{},[90,345,347],{"class":92,"line":346},30,[90,348,349],{},"        return $phone;\n",[90,351,353],{"class":92,"line":352},31,[90,354,133],{},[90,356,358],{"class":92,"line":357},32,[90,359,166],{},[90,361,363],{"class":92,"line":362},33,[90,364,103],{"emptyLinePlaceholder":102},[90,366,368],{"class":92,"line":367},34,[90,369,370],{},"\u002F\u002F Fabrika metodunu uygulayan somut seçici sınıflar\n",[90,372,374],{"class":92,"line":373},35,[90,375,376],{},"class AndroidPicker extends PhonePicker\n",[90,378,380],{"class":92,"line":379},36,[90,381,382],{},"{\n",[90,384,386],{"class":92,"line":385},37,[90,387,388],{},"    public function createPhone(): Phone {\n",[90,390,392],{"class":92,"line":391},38,[90,393,127],{},[90,395,397],{"class":92,"line":396},39,[90,398,399],{},"    }  \n",[90,401,403],{"class":92,"line":402},40,[90,404,166],{},[90,406,408],{"class":92,"line":407},41,[90,409,103],{"emptyLinePlaceholder":102},[90,411,413],{"class":92,"line":412},42,[90,414,415],{},"class IosPicker extends PhonePicker\n",[90,417,419],{"class":92,"line":418},43,[90,420,382],{},[90,422,424],{"class":92,"line":423},44,[90,425,388],{},[90,427,429],{"class":92,"line":428},45,[90,430,155],{},[90,432,434],{"class":92,"line":433},46,[90,435,399],{},[90,437,439],{"class":92,"line":438},47,[90,440,166],{},[61,442],{},[64,444,446],{"id":445},"_3-soyut-fabrika-abstract-factory","3. Soyut Fabrika (Abstract Factory)",[14,448,449,450,453],{},"Programımızın sadece telefonları değil, tabletleri de desteklemesini (yani birbiriyle ilişkili bir ",[18,451,452],{},"ürün ailesi"," oluşturmayı) istersek Abstract Factory bu iş için en uygun seçenektir.",[14,455,456,457,460,461,464,465,468,469,55,472,475],{},"Aşağıdaki örnekte ",[72,458,459],{},"DeviceFactory"," arayüzü, ilişkili nesneler olan telefon (",[72,462,463],{},"createPhone",") ve tablet (",[72,466,467],{},"createTablet",") oluşturma metotlarını tanımlar. ",[72,470,471],{},"AndroidFactory",[72,473,474],{},"IosFactory"," somut sınıfları ise bu metotları kendi işletim sistemi ailelerine göre uygular:",[81,477,479],{"className":83,"code":478,"language":85,"meta":86,"style":86},"\u003C?php\n\ninterface AbstractPhone {\n    public function getType(): string;\n}\n\ninterface AbstractTablet {\n    public function getType(): string;\n}\n\n\u002F\u002F Ürün Aileleri: Android\nclass AndroidPhone implements AbstractPhone {\n    public function getType(): string {\n        return 'I am an Android phone';\n    }\n}\n\nclass AndroidTablet implements AbstractTablet {\n    public function getType(): string {\n        return 'I am an Android tablet';\n    }\n}\n\n\u002F\u002F Ürün Aileleri: iOS\nclass IosPhone implements AbstractPhone {\n    public function getType(): string {\n        return 'I am an iOS phone';\n    }\n}\n\nclass IosTablet implements AbstractTablet {\n    public function getType(): string {\n        return 'I am an iOS tablet';\n    }\n}\n\n\u002F\u002F Soyut Fabrika Arayüzü\ninterface DeviceFactory {\n    public function createPhone(): AbstractPhone;\n    public function createTablet(): AbstractTablet;\n}\n\n\u002F\u002F Somut Fabrikalar\nclass AndroidFactory implements DeviceFactory\n{\n    public function createPhone(): AbstractPhone\n    {\n        return new AndroidPhone();\n    }\n\n    public function createTablet(): AbstractTablet\n    {\n        return new AndroidTablet();\n    }\n}\n\nclass IosFactory implements DeviceFactory\n{\n    public function createPhone(): AbstractPhone\n    {\n        return new IosPhone();\n    }\n\n    public function createTablet(): AbstractTablet\n    {\n        return new IosTablet();\n    }\n}\n",[72,480,481,485,489,494,498,502,506,511,515,519,523,528,533,537,542,546,550,554,559,563,568,572,576,580,585,590,594,599,603,607,611,616,620,625,629,633,637,642,647,652,657,661,665,670,675,679,684,688,693,698,703,709,714,720,725,730,735,741,746,751,756,761,766,771,776,781,787,792],{"__ignoreMap":86},[90,482,483],{"class":92,"line":93},[90,484,96],{},[90,486,487],{"class":92,"line":99},[90,488,103],{"emptyLinePlaceholder":102},[90,490,491],{"class":92,"line":106},[90,492,493],{},"interface AbstractPhone {\n",[90,495,496],{"class":92,"line":112},[90,497,214],{},[90,499,500],{"class":92,"line":118},[90,501,166],{},[90,503,504],{"class":92,"line":124},[90,505,103],{"emptyLinePlaceholder":102},[90,507,508],{"class":92,"line":130},[90,509,510],{},"interface AbstractTablet {\n",[90,512,513],{"class":92,"line":136},[90,514,214],{},[90,516,517],{"class":92,"line":141},[90,518,166],{},[90,520,521],{"class":92,"line":147},[90,522,103],{"emptyLinePlaceholder":102},[90,524,525],{"class":92,"line":152},[90,526,527],{},"\u002F\u002F Ürün Aileleri: Android\n",[90,529,530],{"class":92,"line":158},[90,531,532],{},"class AndroidPhone implements AbstractPhone {\n",[90,534,535],{"class":92,"line":163},[90,536,232],{},[90,538,539],{"class":92,"line":257},[90,540,541],{},"        return 'I am an Android phone';\n",[90,543,544],{"class":92,"line":262},[90,545,133],{},[90,547,548],{"class":92,"line":268},[90,549,166],{},[90,551,552],{"class":92,"line":273},[90,553,103],{"emptyLinePlaceholder":102},[90,555,556],{"class":92,"line":278},[90,557,558],{},"class AndroidTablet implements AbstractTablet {\n",[90,560,561],{"class":92,"line":283},[90,562,232],{},[90,564,565],{"class":92,"line":289},[90,566,567],{},"        return 'I am an Android tablet';\n",[90,569,570],{"class":92,"line":295},[90,571,133],{},[90,573,574],{"class":92,"line":301},[90,575,166],{},[90,577,578],{"class":92,"line":306},[90,579,103],{"emptyLinePlaceholder":102},[90,581,582],{"class":92,"line":312},[90,583,584],{},"\u002F\u002F Ürün Aileleri: iOS\n",[90,586,587],{"class":92,"line":317},[90,588,589],{},"class IosPhone implements AbstractPhone {\n",[90,591,592],{"class":92,"line":323},[90,593,232],{},[90,595,596],{"class":92,"line":329},[90,597,598],{},"        return 'I am an iOS phone';\n",[90,600,601],{"class":92,"line":335},[90,602,133],{},[90,604,605],{"class":92,"line":341},[90,606,166],{},[90,608,609],{"class":92,"line":346},[90,610,103],{"emptyLinePlaceholder":102},[90,612,613],{"class":92,"line":352},[90,614,615],{},"class IosTablet implements AbstractTablet {\n",[90,617,618],{"class":92,"line":357},[90,619,232],{},[90,621,622],{"class":92,"line":362},[90,623,624],{},"        return 'I am an iOS tablet';\n",[90,626,627],{"class":92,"line":367},[90,628,133],{},[90,630,631],{"class":92,"line":373},[90,632,166],{},[90,634,635],{"class":92,"line":379},[90,636,103],{"emptyLinePlaceholder":102},[90,638,639],{"class":92,"line":385},[90,640,641],{},"\u002F\u002F Soyut Fabrika Arayüzü\n",[90,643,644],{"class":92,"line":391},[90,645,646],{},"interface DeviceFactory {\n",[90,648,649],{"class":92,"line":396},[90,650,651],{},"    public function createPhone(): AbstractPhone;\n",[90,653,654],{"class":92,"line":402},[90,655,656],{},"    public function createTablet(): AbstractTablet;\n",[90,658,659],{"class":92,"line":407},[90,660,166],{},[90,662,663],{"class":92,"line":412},[90,664,103],{"emptyLinePlaceholder":102},[90,666,667],{"class":92,"line":418},[90,668,669],{},"\u002F\u002F Somut Fabrikalar\n",[90,671,672],{"class":92,"line":423},[90,673,674],{},"class AndroidFactory implements DeviceFactory\n",[90,676,677],{"class":92,"line":428},[90,678,382],{},[90,680,681],{"class":92,"line":433},[90,682,683],{},"    public function createPhone(): AbstractPhone\n",[90,685,686],{"class":92,"line":438},[90,687,121],{},[90,689,691],{"class":92,"line":690},48,[90,692,127],{},[90,694,696],{"class":92,"line":695},49,[90,697,133],{},[90,699,701],{"class":92,"line":700},50,[90,702,103],{"emptyLinePlaceholder":102},[90,704,706],{"class":92,"line":705},51,[90,707,708],{},"    public function createTablet(): AbstractTablet\n",[90,710,712],{"class":92,"line":711},52,[90,713,121],{},[90,715,717],{"class":92,"line":716},53,[90,718,719],{},"        return new AndroidTablet();\n",[90,721,723],{"class":92,"line":722},54,[90,724,133],{},[90,726,728],{"class":92,"line":727},55,[90,729,166],{},[90,731,733],{"class":92,"line":732},56,[90,734,103],{"emptyLinePlaceholder":102},[90,736,738],{"class":92,"line":737},57,[90,739,740],{},"class IosFactory implements DeviceFactory\n",[90,742,744],{"class":92,"line":743},58,[90,745,382],{},[90,747,749],{"class":92,"line":748},59,[90,750,683],{},[90,752,754],{"class":92,"line":753},60,[90,755,121],{},[90,757,759],{"class":92,"line":758},61,[90,760,155],{},[90,762,764],{"class":92,"line":763},62,[90,765,133],{},[90,767,769],{"class":92,"line":768},63,[90,770,103],{"emptyLinePlaceholder":102},[90,772,774],{"class":92,"line":773},64,[90,775,708],{},[90,777,779],{"class":92,"line":778},65,[90,780,121],{},[90,782,784],{"class":92,"line":783},66,[90,785,786],{},"        return new IosTablet();\n",[90,788,790],{"class":92,"line":789},67,[90,791,133],{},[90,793,795],{"class":92,"line":794},68,[90,796,166],{},[61,798],{},[800,801,803],"h3",{"id":802},"factory-method-ve-abstract-factory-karşılaştırması","Factory Method ve Abstract Factory Karşılaştırması",[805,806,807,822],"table",{},[808,809,810],"thead",{},[811,812,813,818,820],"tr",{},[814,815,817],"th",{"align":816},"left","Özellik",[814,819,54],{"align":816},[814,821,58],{"align":816},[823,824,825,854,871],"tbody",{},[811,826,827,833,843],{},[828,829,830],"td",{"align":816},[18,831,832],{},"Odak Noktası",[828,834,835,836,838,839,842],{"align":816},"Tek bir ürün nesnesi oluşturmak (Örn: ",[72,837,178],{}," ➡️ ",[72,840,841],{},"AndroidPhone",").",[828,844,845,846,838,848,850,851,842],{"align":816},"İlişkili nesne aileleri oluşturmak (Örn: ",[72,847,471],{},[72,849,841],{}," + ",[72,852,853],{},"AndroidTablet",[811,855,856,861,868],{},[828,857,858],{"align":816},[18,859,860],{},"Yapısı",[828,862,863,864,867],{"align":816},"Kalıtım (Inheritance) yoluyla alt sınıfların metodu ezmesini (",[72,865,866],{},"override",") temel alır.",[828,869,870],{"align":816},"Nesne kompozisyonu (Composition) yoluyla fabrikaları kullanır.",[811,872,873,878,881],{},[828,874,875],{"align":816},[18,876,877],{},"Genişletilebilirlik",[828,879,880],{"align":816},"Kolaydır; yeni bir ürün eklemek için sadece yeni bir alt sınıf oluşturulur.",[828,882,883],{"align":816},"Zordur; yeni bir ürün tipi (Örn: SmartWatch) eklemek için tüm fabrikaların güncellenmesi gerekir.",[61,885],{},[887,888,890],"h5",{"id":889},"bu-yazıda-yapılan-değişiklikler","Bu Yazıda Yapılan Değişiklikler",[22,892,893,896],{},[25,894,895],{},"11.05.2022: Yazı özeti düzenlendi.",[25,897,898],{},"21.06.2026: PHP kodlarındaki derleme ve sözdizimi hataları (eksik soyutlama, parantez hataları, tip uyuşmazlığı) giderildi, kod blokları renklendirildi, TL;DR özet ve karşılaştırma tablosu eklendi.",[900,901,902],"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":86,"searchDepth":99,"depth":99,"links":904},[905,906,907],{"id":66,"depth":99,"text":67},{"id":171,"depth":99,"text":172},{"id":445,"depth":99,"text":446,"children":908},[909],{"id":802,"depth":106,"text":803},[911],"technical",null,"2021-07-27","Factory Method ve Abstract Factory tasarım desenleri arasındaki temel farklar, PHP kod örnekleri ve karşılaştırma tablosu.",false,"md","\u002Fimages\u002Fposts\u002F2021\u002F07\u002Fabstract-factory-en1.avif",{},"\u002Ftr\u002Ffactory-method-ve-abstract-factory-farki-nedir",{"title":6,"description":914},"factory-method-ve-abstract-factory-farki-nedir","tr\u002Ffactory-method-ve-abstract-factory-farki-nedir",[924,925],"design-pattern","ipucu","tS8PGOdKcX_CrecMryCP3-GZLbsT3nfsacn2avrZInQ",{"prev":928,"next":931,"others":933,"lucky":1053,"readingTime":112},{"path":929,"title":930},"\u002Ftr\u002Fgo-ile-websockets-websocket-upgrader-nedir","Go ile WebSockets: Upgrader Nedir?",{"path":48,"title":932},"Abstract Factory Tasarım Deseni Nedir?",[934,937,940,943,946,949,952,955,958,961,964,967,970,973,976,979,982,985,988,991,994,997,1000,1003,1006,1009,1012,1015,1018,1021,1024,1027,1030,1033,1036,1039,1042,1044,1047,1050],{"path":935,"title":936},"\u002Ftr\u002Frest-api-uri-yapisi-nasil-olmali","REST API URI Yapısı Nasıl Olmalı?",{"path":938,"title":939},"\u002Ftr\u002Fchain-of-responsibility-deseni-nedir","Chain of Responsibility Deseni Nedir?",{"path":941,"title":942},"\u002Ftr\u002Fes6-nedir-ecmascript-2015-nedir","ES6 Nedir? ECMAScript 2015 Nedir?",{"path":944,"title":945},"\u002Ftr\u002Ftricolor-garbage-collection-algoritmasi-nedir","Tricolor Garbage Collection Algoritması Nedir?",{"path":947,"title":948},"\u002Ftr\u002Fheadless-wordpress-hakkinda-her-sey","Headless WordPress Hakkında Her Şey",{"path":950,"title":951},"\u002Ftr\u002Fes15-nedir-ecmascript-2024-nedir","ES15 nedir? ECMAScript 2024 nedir?",{"path":953,"title":954},"\u002Ftr\u002Fmediator-tasarim-deseni-nedir","Mediator Tasarım Deseni Nedir?",{"path":956,"title":957},"\u002Ftr\u002Fcommand-tasarim-deseni-nedir","Command Tasarım Deseni Nedir?",{"path":959,"title":960},"\u002Ftr\u002Fubuntu-guncellemesi-sonrasi-cyberpanele-ulasilamama-sorunlarini-giderme","Ubuntu Güncellemesi Sonrası CyberPanel'e Ulaşılamama Sorunlarını Giderme",{"path":962,"title":963},"\u002Ftr\u002Fgo-programlama-dilinin-ozellikleri","Go Programlama Dilinin Özellikleri",{"path":965,"title":966},"\u002Ftr\u002Fearly-return-erken-donus-nedir","Early Return \u002F Erken Dönüş nedir?",{"path":968,"title":969},"\u002Ftr\u002Fstrategy-tasarim-deseni-nedir","Strategy Tasarım Deseni Nedir?",{"path":971,"title":972},"\u002Ftr\u002Fes8-nedir-ecmascript-2017-nedir","ES8 Nedir? ECMAScript 2017 Nedir?",{"path":974,"title":975},"\u002Ftr\u002Fobserver-tasarim-deseni-nedir","Observer Tasarım Deseni Nedir?",{"path":977,"title":978},"\u002Ftr\u002Fproxy-tasarim-deseni-nedir","Proxy Tasarım Deseni Nedir?",{"path":980,"title":981},"\u002Ftr\u002Fwordpress-yonetici-sifresini-wp-cli-kullanarak-sifirlama","WordPress Yönetici Şifresini WP-CLI Kullanarak Sıfırlama",{"path":983,"title":984},"\u002Ftr\u002Fdecorator-tasarim-deseni-nedir","Decorator Tasarım Deseni Nedir?",{"path":986,"title":987},"\u002Ftr\u002Fes17-nedir-ecmascript-2026-nedir","ES17 nedir? ECMAScript 2026 nedir?",{"path":989,"title":990},"\u002Ftr\u002Fes16-nedir-ecmascript-2025-nedir","ES16 nedir? ECMAScript 2025 nedir?",{"path":992,"title":993},"\u002Ftr\u002Frest-api-guvenligi-nasil-saglanir","REST Api Güvenliği Nasıl Sağlanır?",{"path":995,"title":996},"\u002Ftr\u002Fdocker-swarm-nedir","Docker Swarm Nedir?",{"path":998,"title":999},"\u002Ftr\u002Fgo-veri-tipleri-string-integer-float-complex-boolean-ve-array","Go Veri Tipleri - String, Integer, Float, Complex, Boolean ve Array",{"path":1001,"title":1002},"\u002Ftr\u002Frest-api-kimlik-dogrulama-nasil-yapilir","REST API Kimlik Doğrulama Nasıl Yapılır?",{"path":1004,"title":1005},"\u002Ftr\u002Fekran-filtresi-mavi-isik-filtresi-flux","Gözlere dost, mavi ışığa düşman ekran filtresi f.lux",{"path":1007,"title":1008},"\u002Ftr\u002Fes11-nedir-ecmascript-2020-nedir","ES11 Nedir? ECMAScript 2020 Nedir?",{"path":1010,"title":1011},"\u002Ftr\u002Ftemiz-moduler-ve-yeniden-kullanilabilir-php-kodu-yazma-rehberi","PHP'de Temiz, Modüler ve Yeniden Kullanılabilir Kod Yazma Rehberi",{"path":1013,"title":1014},"\u002Ftr\u002Fmerhaba-phalcon-framework","Merhaba Phalcon Framework",{"path":1016,"title":1017},"\u002Ftr\u002Fmerhabadunya","Merhaba Dünya",{"path":1019,"title":1020},"\u002Ftr\u002Fbridge-tasarim-deseni-nedir","Bridge Tasarım Deseni Nedir?",{"path":1022,"title":1023},"\u002Ftr\u002Fgo-slice-veri-tipi","Go Veri Tipleri: Slice",{"path":1025,"title":1026},"\u002Ftr\u002Fdocker-ile-mongodb-kurulumu","Docker ile MongoDB Kurulumu",{"path":1028,"title":1029},"\u002Ftr\u002Fvite-nedir","Vite Nedir? Modern Web Geliştirme ve Paketleme Aracı",{"path":1031,"title":1032},"\u002Ftr\u002Fes10-nedir-ecmascript-2019-nedir","ES10 Nedir? ECMAScript 2019 Nedir?",{"path":1034,"title":1035},"\u002Ftr\u002Fdocker-ile-litespeed-enterprise-kurulumu","Docker ile LiteSpeed Enterprise Kurulumu",{"path":1037,"title":1038},"\u002Ftr\u002Fsingleton-tasarim-deseni-nedir","Singleton Tasarım Deseni Nedir?",{"path":1040,"title":1041},"\u002Ftr\u002Frest-api-tasarimi","REST API Tasarım İncelikleri",{"path":53,"title":1043},"Factory Method Tasarım Deseni Nedir?",{"path":1045,"title":1046},"\u002Ftr\u002Fwindows-10-golang-kurulumu","Windows 10 ve 11'de Golang Kurulumu ve GOPATH Yapılandırması",{"path":1048,"title":1049},"\u002Ftr\u002Frest-api-dokumantasyonu-nasil-yapilir","REST Api Dokümantasyonu Nasıl Oluşturulur?",{"path":1051,"title":1052},"\u002Ftr\u002Fyeni-tema-honeywind","Yeni WordPress Temam Honeywind: Tailwind CSS ve Minimalizm",{"path":1054,"title":1055},"\u002Ftr\u002Fgoda-iota-nedir-iota-ne-zaman-ve-nerede-kullanilir","Go'da iota Nedir? iota Ne Zaman ve Nerede Kullanılır?",[1057,1061,1065,1067],{"path":1058,"title":1059,"date":1060},"\u002Ftr\u002Fvisitor-tasarim-deseni-nedir","Visitor Tasarım Deseni Nedir?","2021-10-09",{"path":1062,"title":1063,"date":1064},"\u002Ftr\u002Ftemplate-method-tasarim-deseni-nedir","Template Method Tasarım Deseni Nedir?","2021-10-08",{"path":968,"title":969,"date":1066},"2021-10-07",{"path":1068,"title":1069,"date":1070},"\u002Ftr\u002Fstate-tasarim-deseni-nedir","State Tasarım Deseni Nedir?","2021-10-06",[1072,1074,1078],{"path":959,"title":960,"date":1073},"2023-10-14",{"path":1075,"title":1076,"date":1077},"\u002Ftr\u002Flinuxda-golang-kurulumu","Linux'ta Golang Kurulumu","2021-09-28",{"path":1079,"title":1080,"date":1081},"\u002Ftr\u002Fubuntu-24-04-uzerinde-cyberpanel-kurulumu","Ubuntu 24.04 LTS ve 22.04 LTS Üzerinde CyberPanel Kurulumu","2026-06-20",1782142075159]