[{"data":1,"prerenderedAt":1544},["ShallowReactive",2],{"post-\u002Ftr\u002Ftasarim-kaliplari-design-patterns-factory-method-nedir":3},{"page":4,"translation":1389,"nav":1403,"related":1522,"random":1534},{"id":5,"title":6,"body":7,"categories":1387,"category":1389,"date":1390,"description":1391,"draft":1392,"extension":1393,"image":1394,"kind":1389,"lang":491,"meta":1395,"navigation":270,"path":1269,"readingTime":274,"seo":1396,"slug":1397,"stem":1398,"tags":1399,"translationKey":1389,"type":1388,"updated":1389,"__hash__":1402},"postsTr\u002Ftr\u002Ftasarim-kaliplari-design-patterns-factory-method-nedir.md","Factory Method Tasarım Deseni Nedir?",{"type":8,"value":9,"toc":1369},"minimark",[10,20,33,36,89,92,97,100,102,106,113,116,123,141,143,147,159,165,168,171,177,202,208,217,219,223,230,478,480,484,547,549,553,573,575,579,614,616,620,625,949,953,1197,1199,1203,1207,1236,1240,1254,1256,1260,1265,1284,1289,1319,1324,1365],[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,83],"ul",{},[50,51,52,55,56,60],"li",{},[43,53,54],{},"Amaç:"," Nesne oluşturma mantığını (",[57,58,59],"code",{},"new"," kullanımını) doğrudan istemci koddan alıp soyut bir metoda devrederek, istemcinin somut sınıflara bağımlı olmasını önler.",[50,62,63,66,67,70,71,74,75,78,79,82],{},[43,64,65],{},"Kilit Yapılar:"," Ürün Arayüzü (",[57,68,69],{},"Product","), Somut Ürünler (",[57,72,73],{},"ConcreteProduct","), Oluşturucu (",[57,76,77],{},"Creator",") ve Somut Oluşturucular (",[57,80,81],{},"ConcreteCreator",").",[50,84,85,88],{},[43,86,87],{},"En Büyük Avantajı:"," Kodumuza yeni ürün tipleri veya nesneler eklerken mevcut istemci kodunu bozmaz veya değiştirmeyiz (Open\u002FClosed Principle).",[90,91],"hr",{},[93,94,96],"h2",{"id":95},"factory-method-tasarım-deseni-amacı","Factory Method Tasarım Deseni Amacı",[11,98,99],{},"Kelime anlamı \"Fabrika Metodu\" olan Factory Method, üst sınıfta nesneler oluşturmak için bir arabirim sağlayan, ancak alt sınıfların oluşturulacak bu nesne türünü değiştirmesine izin veren bir yaratımsal (creational) tasarım desenidir.",[90,101],{},[93,103,105],{"id":104},"sorun","Sorun",[11,107,108,109,112],{},"Bir lojistik yönetim uygulaması oluşturduğunuzu hayal edin. Uygulamanızın ilk sürümü sadece kamyon nakliyesini desteklediğinden, kodunuzun neredeyse tamamını ",[57,110,111],{},"Kamyon"," sınıfına bağımlı olacak şekilde yazdınız.",[11,114,115],{},"Bir süre sonra uygulamanız çok popüler hale geldi ve deniz taşımacılığı şirketleri sisteme deniz taşımacılığını da eklemeniz için ısrarla sizi aramaya başladı.",[11,117,118],{},[119,120],"img",{"alt":121,"src":122},"Adding a new transportation class to the program causes an issue","\u002Fimages\u002Ftasarim-kaliplari-design-patterns-factory-method-nedir\u002Fproblem1-en.avif",[11,124,125,126,128,129,132,133,136,137,140],{},"Geliştirme aşamasında bu harika bir haber olsa da kod tasarımı açısından büyük bir problemdir. Çünkü şu an kodunuzun büyük bölümü ",[57,127,111],{}," sınıfı ile sıkı sıkıya entegre durumdadır. ",[57,130,131],{},"Gemi"," sınıfını eklemek, tüm kod tabanında değişiklik yapmayı ve nakliye aracının tipine göre uygulamanın davranışlarını değiştiren karmaşık ",[57,134,135],{},"if-else"," \u002F ",[57,138,139],{},"switch"," kontrol yapıları eklemeyi gerektirir. Yarın bir gün havayolu taşımacılığı da eklemek istediğinizde aynı acılı süreci en baştan yaşamak zorunda kalırsınız.",[90,142],{},[93,144,146],{"id":145},"çözüm","Çözüm",[11,148,149,152,153,155,156,158],{},[43,150,151],{},"Factory Method deseni",", nesneleri doğrudan istemci kodunda ",[57,154,59],{}," operatörü ile üretmek yerine, bu oluşturma çağrılarını özel bir \"fabrika metodu\" (factory method) içerisine taşımayı önerir. Nesneler yine ",[57,157,59],{}," ile oluşturulur ancak bu işlem fabrika metodunun sorumluluğundadır. Bu metottan dönen nesneler genellikle \"Ürün\" (Product) olarak adlandırılır.",[11,160,161],{},[119,162],{"alt":163,"src":164},"The structure of creator classes","\u002Fimages\u002Ftasarim-kaliplari-design-patterns-factory-method-nedir\u002Fsolution1.avif",[11,166,167],{},"Bu değişikliğin en büyük gücü şudur: Artık bir üst sınıfı genişleterek, onun oluşturacağı nesnenin (ürünün) türünü alt sınıflarda ezerek (override) dinamik olarak değiştirebiliriz.",[11,169,170],{},"Ancak burada önemli bir kural vardır: Alt sınıfların farklı ürünler döndürebilmesi için bu ürünlerin ortak bir arayüzü (Interface) veya soyut sınıfı (Abstract Class) paylaşması gerekir. Ayrıca üst sınıftaki fabrika metodunun dönüş tipi bu ortak arayüz olmalıdır.",[11,172,173],{},[119,174],{"alt":175,"src":176},"The structure of the products hierarchy","\u002Fimages\u002Ftasarim-kaliplari-design-patterns-factory-method-nedir\u002Fsolution2-en.avif",[11,178,179,180,182,183,185,186,189,190,193,194,197,198,201],{},"Örneğin hem ",[57,181,111],{}," hem de ",[57,184,131],{}," sınıfları ",[57,187,188],{},"tasi()"," adında bir metot içeren ",[57,191,192],{},"Transport"," arayüzünü uygulamalıdır. Kamyonlar karadan, gemiler ise denizden taşır. ",[57,195,196],{},"KaraLojistigi"," sınıfı kamyon nesnesi dönerken, ",[57,199,200],{},"DenizLojistigi"," sınıfı gemi nesnesi döner.",[11,203,204],{},[119,205],{"alt":206,"src":207},"The structure of the code after applying the factory method pattern","\u002Fimages\u002Ftasarim-kaliplari-design-patterns-factory-method-nedir\u002Fsolution3-en.avif",[11,209,210,211,213,214,216],{},"İstemci kod (client code) bu iki nesne arasındaki farkı bilmek zorunda değildir. İstemci sadece bir ",[57,212,192],{}," nesnesi aldığını ve bunun ",[57,215,188],{}," metoduna sahip olduğunu bilir. Taşıma işleminin arka planda kara yoluyla mı yoksa deniz yoluyla mı yapıldı istemcinin odağı dışındadır.",[90,218],{},[93,220,222],{"id":221},"gerçek-hayat-senaryosu-bildirim-gönderim-sistemi","Gerçek Hayat Senaryosu: Bildirim Gönderim Sistemi",[11,224,225,226,229],{},"Yazılım projelerinde çok sık kullanılan ",[43,227,228],{},"\"Bildirim Gönderimi (Notification Service)\""," mimarisi üzerinde bu deseni kurgulayalım:",[231,232,237],"pre",{"className":233,"code":234,"language":235,"meta":236,"style":236},"language-php shiki shiki-themes github-light github-dark","\u002F\u002F 1. Ürün Arayüzü (Product Interface)\ninterface Notification {\n    public function send(string $message): void;\n}\n\n\u002F\u002F 2. Somut Ürünler (Concrete Products)\nclass EmailNotification implements Notification {\n    public function send(string $message): void {\n        echo \"E-posta gönderildi: '$message'\\n\";\n    }\n}\n\nclass SmsNotification implements Notification {\n    public function send(string $message): void {\n        echo \"SMS gönderildi: '$message'\\n\";\n    }\n}\n\n\u002F\u002F 3. Oluşturucu Sınıf (Creator)\nabstract class NotificationCreator {\n    \u002F\u002F Fabrika Metodu (Factory Method)\n    abstract public function createNotification(): Notification;\n\n    \u002F\u002F İş mantığı ürüne bağımlı olmadan çalışır\n    public function notify(string $message): void {\n        $notification = $this->createNotification();\n        $notification->send($message);\n    }\n}\n\n\u002F\u002F 4. Somut Oluşturucular (Concrete Creators)\nclass EmailNotificationCreator extends NotificationCreator {\n    public function createNotification(): Notification {\n        return new EmailNotification();\n    }\n}\n\nclass SmsNotificationCreator extends NotificationCreator {\n    public function createNotification(): Notification {\n        return new SmsNotification();\n    }\n}\n","php","",[57,238,239,247,253,259,265,272,278,284,290,296,302,307,312,318,323,329,334,339,344,350,356,362,368,373,379,385,391,397,402,407,412,418,424,430,436,441,446,451,457,462,468,473],{"__ignoreMap":236},[240,241,244],"span",{"class":242,"line":243},"line",1,[240,245,246],{},"\u002F\u002F 1. Ürün Arayüzü (Product Interface)\n",[240,248,250],{"class":242,"line":249},2,[240,251,252],{},"interface Notification {\n",[240,254,256],{"class":242,"line":255},3,[240,257,258],{},"    public function send(string $message): void;\n",[240,260,262],{"class":242,"line":261},4,[240,263,264],{},"}\n",[240,266,268],{"class":242,"line":267},5,[240,269,271],{"emptyLinePlaceholder":270},true,"\n",[240,273,275],{"class":242,"line":274},6,[240,276,277],{},"\u002F\u002F 2. Somut Ürünler (Concrete Products)\n",[240,279,281],{"class":242,"line":280},7,[240,282,283],{},"class EmailNotification implements Notification {\n",[240,285,287],{"class":242,"line":286},8,[240,288,289],{},"    public function send(string $message): void {\n",[240,291,293],{"class":242,"line":292},9,[240,294,295],{},"        echo \"E-posta gönderildi: '$message'\\n\";\n",[240,297,299],{"class":242,"line":298},10,[240,300,301],{},"    }\n",[240,303,305],{"class":242,"line":304},11,[240,306,264],{},[240,308,310],{"class":242,"line":309},12,[240,311,271],{"emptyLinePlaceholder":270},[240,313,315],{"class":242,"line":314},13,[240,316,317],{},"class SmsNotification implements Notification {\n",[240,319,321],{"class":242,"line":320},14,[240,322,289],{},[240,324,326],{"class":242,"line":325},15,[240,327,328],{},"        echo \"SMS gönderildi: '$message'\\n\";\n",[240,330,332],{"class":242,"line":331},16,[240,333,301],{},[240,335,337],{"class":242,"line":336},17,[240,338,264],{},[240,340,342],{"class":242,"line":341},18,[240,343,271],{"emptyLinePlaceholder":270},[240,345,347],{"class":242,"line":346},19,[240,348,349],{},"\u002F\u002F 3. Oluşturucu Sınıf (Creator)\n",[240,351,353],{"class":242,"line":352},20,[240,354,355],{},"abstract class NotificationCreator {\n",[240,357,359],{"class":242,"line":358},21,[240,360,361],{},"    \u002F\u002F Fabrika Metodu (Factory Method)\n",[240,363,365],{"class":242,"line":364},22,[240,366,367],{},"    abstract public function createNotification(): Notification;\n",[240,369,371],{"class":242,"line":370},23,[240,372,271],{"emptyLinePlaceholder":270},[240,374,376],{"class":242,"line":375},24,[240,377,378],{},"    \u002F\u002F İş mantığı ürüne bağımlı olmadan çalışır\n",[240,380,382],{"class":242,"line":381},25,[240,383,384],{},"    public function notify(string $message): void {\n",[240,386,388],{"class":242,"line":387},26,[240,389,390],{},"        $notification = $this->createNotification();\n",[240,392,394],{"class":242,"line":393},27,[240,395,396],{},"        $notification->send($message);\n",[240,398,400],{"class":242,"line":399},28,[240,401,301],{},[240,403,405],{"class":242,"line":404},29,[240,406,264],{},[240,408,410],{"class":242,"line":409},30,[240,411,271],{"emptyLinePlaceholder":270},[240,413,415],{"class":242,"line":414},31,[240,416,417],{},"\u002F\u002F 4. Somut Oluşturucular (Concrete Creators)\n",[240,419,421],{"class":242,"line":420},32,[240,422,423],{},"class EmailNotificationCreator extends NotificationCreator {\n",[240,425,427],{"class":242,"line":426},33,[240,428,429],{},"    public function createNotification(): Notification {\n",[240,431,433],{"class":242,"line":432},34,[240,434,435],{},"        return new EmailNotification();\n",[240,437,439],{"class":242,"line":438},35,[240,440,301],{},[240,442,444],{"class":242,"line":443},36,[240,445,264],{},[240,447,449],{"class":242,"line":448},37,[240,450,271],{"emptyLinePlaceholder":270},[240,452,454],{"class":242,"line":453},38,[240,455,456],{},"class SmsNotificationCreator extends NotificationCreator {\n",[240,458,460],{"class":242,"line":459},39,[240,461,429],{},[240,463,465],{"class":242,"line":464},40,[240,466,467],{},"        return new SmsNotification();\n",[240,469,471],{"class":242,"line":470},41,[240,472,301],{},[240,474,476],{"class":242,"line":475},42,[240,477,264],{},[90,479],{},[93,481,483],{"id":482},"factory-method-vs-abstract-factory","Factory Method vs Abstract Factory",[485,486,487,504],"table",{},[488,489,490],"thead",{},[491,492,493,498,501],"tr",{},[494,495,497],"th",{"align":496},"left","Kriter",[494,499,500],{"align":496},"Factory Method",[494,502,503],{"align":496},"Abstract Factory",[505,506,507,521,534],"tbody",{},[491,508,509,515,518],{},[510,511,512],"td",{"align":496},[43,513,514],{},"Odağı",[510,516,517],{"align":496},"Tek bir ürün nesnesinin oluşturulması ve alt sınıfa devri.",[510,519,520],{"align":496},"Birbiriyle ilişkili veya bağımlı ürün ailelerinin oluşturulması.",[491,522,523,528,531],{},[510,524,525],{"align":496},[43,526,527],{},"Uygulama",[510,529,530],{"align":496},"Kalıtım (Inheritance) tabanlıdır.",[510,532,533],{"align":496},"Kompozisyon (Composition) tabanlıdır.",[491,535,536,541,544],{},[510,537,538],{"align":496},[43,539,540],{},"Genişletilebilirlik",[510,542,543],{"align":496},"Yeni bir ürün eklemek için sadece yeni bir alt sınıf yazılır.",[510,545,546],{"align":496},"Yeni bir ürün ailesi eklemek tüm fabrika arayüzünün güncellenmesini gerektirebilir.",[90,548],{},[93,550,552],{"id":551},"uygulanabilirlik","Uygulanabilirlik",[47,554,555,561,567],{},[50,556,557,560],{},[43,558,559],{},"Bilinmeyen Nesne Tipleri:"," Kodunuzun çalışması gereken nesnelerin türlerini ve bağımlılıklarını önceden tam olarak kestiremediğinizde kullanın.",[50,562,563,566],{},[43,564,565],{},"Bileşen Genişletme:"," Kütüphanenizin veya framework'ünüzün kullanıcılarının, iç bileşenleri alt sınıflar aracılığıyla kolayca genişletebilmesini istediğinizde kullanın.",[50,568,569,572],{},[43,570,571],{},"Nesne Havuzlama (Object Pooling):"," Sistem kaynaklarından tasarruf etmek amacıyla, her seferinde yeni bir nesne oluşturmak yerine mevcut nesneleri (veritabanı bağlantıları, soketler vb.) tekrar kullanmak istediğinizde kullanın.",[90,574],{},[93,576,578],{"id":577},"diğer-tasarım-desenleri-ile-i̇lişkisi","Diğer Tasarım Desenleri ile İlişkisi",[47,580,581,598,606],{},[50,582,583,584,586,587,589,590,593,594,597],{},"Çoğu tasarım ",[43,585,500],{}," kullanılarak başlar ve zamanla ihtiyaçlar arttıkça ",[43,588,503],{},", ",[43,591,592],{},"Prototype"," veya ",[43,595,596],{},"Builder"," yapılarına evrilir.",[50,599,600,602,603,605],{},[43,601,503],{}," sınıfları genellikle birden fazla ",[43,604,500],{}," içerir.",[50,607,608,589,610,613],{},[43,609,500],{},[43,611,612],{},"Template Method"," tasarım deseninin özel bir adımı olarak sıklıkla kullanılır.",[90,615],{},[93,617,619],{"id":618},"factory-method-kod-örnekleri","Factory Method Kod Örnekleri",[621,622,624],"h3",{"id":623},"örnek-php-kodu","Örnek PHP Kodu",[231,626,628],{"className":233,"code":627,"language":235,"meta":236,"style":236},"\u003C?php\n\nnamespace RefactoringGuru\\FactoryMethod\\Conceptual;\n\nabstract class Creator\n{\n    abstract public function factoryMethod(): Product;\n\n    public function someOperation(): string\n    {\n        $product = $this->factoryMethod();\n        $result = \"Creator: Aynı oluşturucu kodu şununla çalıştı: \" .\n            $product->operation();\n        return $result;\n    }\n}\n\nclass ConcreteCreator1 extends Creator\n{\n    public function factoryMethod(): Product\n    {\n         return new ConcreteProduct1();\n    }\n}\n\nclass ConcreteCreator2 extends Creator\n{\n    public function factoryMethod(): Product\n    {\n        return new ConcreteProduct2();\n    }\n}\n\ninterface Product\n{\n    public function operation(): string;\n}\n\nclass ConcreteProduct1 implements Product\n{\n    public function operation(): string\n    {\n        return \"{ConcreteProduct1 Sonucu}\";\n    }\n}\n\nclass ConcreteProduct2 implements Product\n{\n    public function operation(): string\n    {\n        return \"{ConcreteProduct2 Sonucu}\";\n    }\n}\n\nfunction clientCode(Creator $creator)\n{\n    echo \"İstemci: Oluşturucu sınıfından haberim yok, fakat yine de sorunsuz çalışıyor.\\n\"\n        . $creator->someOperation();\n}\n\necho \"Uygulama: ConcreteCreator1 ile çalışıyor.\\n\";\nclientCode(new ConcreteCreator1());\necho \"\\n\\n\";\n\necho \"Uygulama: ConcreteCreator2 ile çalışıyor.\\n\";\nclientCode(new ConcreteCreator2());\n",[57,629,630,635,639,644,648,653,658,663,667,672,677,682,687,692,697,701,705,709,714,718,723,727,732,736,740,744,749,753,757,761,766,770,774,778,783,787,792,796,800,805,809,814,818,824,829,834,839,845,850,855,860,866,871,876,881,887,892,898,904,909,914,920,926,932,937,943],{"__ignoreMap":236},[240,631,632],{"class":242,"line":243},[240,633,634],{},"\u003C?php\n",[240,636,637],{"class":242,"line":249},[240,638,271],{"emptyLinePlaceholder":270},[240,640,641],{"class":242,"line":255},[240,642,643],{},"namespace RefactoringGuru\\FactoryMethod\\Conceptual;\n",[240,645,646],{"class":242,"line":261},[240,647,271],{"emptyLinePlaceholder":270},[240,649,650],{"class":242,"line":267},[240,651,652],{},"abstract class Creator\n",[240,654,655],{"class":242,"line":274},[240,656,657],{},"{\n",[240,659,660],{"class":242,"line":280},[240,661,662],{},"    abstract public function factoryMethod(): Product;\n",[240,664,665],{"class":242,"line":286},[240,666,271],{"emptyLinePlaceholder":270},[240,668,669],{"class":242,"line":292},[240,670,671],{},"    public function someOperation(): string\n",[240,673,674],{"class":242,"line":298},[240,675,676],{},"    {\n",[240,678,679],{"class":242,"line":304},[240,680,681],{},"        $product = $this->factoryMethod();\n",[240,683,684],{"class":242,"line":309},[240,685,686],{},"        $result = \"Creator: Aynı oluşturucu kodu şununla çalıştı: \" .\n",[240,688,689],{"class":242,"line":314},[240,690,691],{},"            $product->operation();\n",[240,693,694],{"class":242,"line":320},[240,695,696],{},"        return $result;\n",[240,698,699],{"class":242,"line":325},[240,700,301],{},[240,702,703],{"class":242,"line":331},[240,704,264],{},[240,706,707],{"class":242,"line":336},[240,708,271],{"emptyLinePlaceholder":270},[240,710,711],{"class":242,"line":341},[240,712,713],{},"class ConcreteCreator1 extends Creator\n",[240,715,716],{"class":242,"line":346},[240,717,657],{},[240,719,720],{"class":242,"line":352},[240,721,722],{},"    public function factoryMethod(): Product\n",[240,724,725],{"class":242,"line":358},[240,726,676],{},[240,728,729],{"class":242,"line":364},[240,730,731],{},"         return new ConcreteProduct1();\n",[240,733,734],{"class":242,"line":370},[240,735,301],{},[240,737,738],{"class":242,"line":375},[240,739,264],{},[240,741,742],{"class":242,"line":381},[240,743,271],{"emptyLinePlaceholder":270},[240,745,746],{"class":242,"line":387},[240,747,748],{},"class ConcreteCreator2 extends Creator\n",[240,750,751],{"class":242,"line":393},[240,752,657],{},[240,754,755],{"class":242,"line":399},[240,756,722],{},[240,758,759],{"class":242,"line":404},[240,760,676],{},[240,762,763],{"class":242,"line":409},[240,764,765],{},"        return new ConcreteProduct2();\n",[240,767,768],{"class":242,"line":414},[240,769,301],{},[240,771,772],{"class":242,"line":420},[240,773,264],{},[240,775,776],{"class":242,"line":426},[240,777,271],{"emptyLinePlaceholder":270},[240,779,780],{"class":242,"line":432},[240,781,782],{},"interface Product\n",[240,784,785],{"class":242,"line":438},[240,786,657],{},[240,788,789],{"class":242,"line":443},[240,790,791],{},"    public function operation(): string;\n",[240,793,794],{"class":242,"line":448},[240,795,264],{},[240,797,798],{"class":242,"line":453},[240,799,271],{"emptyLinePlaceholder":270},[240,801,802],{"class":242,"line":459},[240,803,804],{},"class ConcreteProduct1 implements Product\n",[240,806,807],{"class":242,"line":464},[240,808,657],{},[240,810,811],{"class":242,"line":470},[240,812,813],{},"    public function operation(): string\n",[240,815,816],{"class":242,"line":475},[240,817,676],{},[240,819,821],{"class":242,"line":820},43,[240,822,823],{},"        return \"{ConcreteProduct1 Sonucu}\";\n",[240,825,827],{"class":242,"line":826},44,[240,828,301],{},[240,830,832],{"class":242,"line":831},45,[240,833,264],{},[240,835,837],{"class":242,"line":836},46,[240,838,271],{"emptyLinePlaceholder":270},[240,840,842],{"class":242,"line":841},47,[240,843,844],{},"class ConcreteProduct2 implements Product\n",[240,846,848],{"class":242,"line":847},48,[240,849,657],{},[240,851,853],{"class":242,"line":852},49,[240,854,813],{},[240,856,858],{"class":242,"line":857},50,[240,859,676],{},[240,861,863],{"class":242,"line":862},51,[240,864,865],{},"        return \"{ConcreteProduct2 Sonucu}\";\n",[240,867,869],{"class":242,"line":868},52,[240,870,301],{},[240,872,874],{"class":242,"line":873},53,[240,875,264],{},[240,877,879],{"class":242,"line":878},54,[240,880,271],{"emptyLinePlaceholder":270},[240,882,884],{"class":242,"line":883},55,[240,885,886],{},"function clientCode(Creator $creator)\n",[240,888,890],{"class":242,"line":889},56,[240,891,657],{},[240,893,895],{"class":242,"line":894},57,[240,896,897],{},"    echo \"İstemci: Oluşturucu sınıfından haberim yok, fakat yine de sorunsuz çalışıyor.\\n\"\n",[240,899,901],{"class":242,"line":900},58,[240,902,903],{},"        . $creator->someOperation();\n",[240,905,907],{"class":242,"line":906},59,[240,908,264],{},[240,910,912],{"class":242,"line":911},60,[240,913,271],{"emptyLinePlaceholder":270},[240,915,917],{"class":242,"line":916},61,[240,918,919],{},"echo \"Uygulama: ConcreteCreator1 ile çalışıyor.\\n\";\n",[240,921,923],{"class":242,"line":922},62,[240,924,925],{},"clientCode(new ConcreteCreator1());\n",[240,927,929],{"class":242,"line":928},63,[240,930,931],{},"echo \"\\n\\n\";\n",[240,933,935],{"class":242,"line":934},64,[240,936,271],{"emptyLinePlaceholder":270},[240,938,940],{"class":242,"line":939},65,[240,941,942],{},"echo \"Uygulama: ConcreteCreator2 ile çalışıyor.\\n\";\n",[240,944,946],{"class":242,"line":945},66,[240,947,948],{},"clientCode(new ConcreteCreator2());\n",[621,950,952],{"id":951},"örnek-python-kodu","Örnek Python Kodu",[231,954,958],{"className":955,"code":956,"language":957,"meta":236,"style":236},"language-python shiki shiki-themes github-light github-dark","from __future__ import annotations\nfrom abc import ABC, abstractmethod\n\nclass Creator(ABC):\n    @abstractmethod\n    def factory_method(self) -> Product:\n        pass\n\n    def some_operation(self) -> str:\n        product = self.factory_method()\n        result = f\"Creator: Aynı oluşturucu kodu şununla çalıştı: {product.operation()}\"\n        return result\n\n\nclass ConcreteCreator1(Creator):\n    def factory_method(self) -> Product:\n        return ConcreteProduct1()\n\n\nclass ConcreteCreator2(Creator):\n    def factory_method(self) -> Product:\n        return ConcreteProduct2()\n\n\nclass Product(ABC):\n    @abstractmethod\n    def operation(self) -> str:\n        pass\n\n\nclass ConcreteProduct1(Product):\n    def operation(self) -> str:\n        return \"{ConcreteProduct1 Sonucu}\"\n\n\nclass ConcreteProduct2(Product):\n    def operation(self) -> str:\n        return \"{ConcreteProduct2 Sonucu}\"\n\n\ndef client_code(creator: Creator) -> None:\n    print(f\"İstemci: Oluşturucu sınıfından bağımsız çalışıyorum.\\n\"\n          f\"{creator.some_operation()}\", end=\"\")\n\n\nif __name__ == \"__main__\":\n    print(\"Uygulama: ConcreteCreator1 ile başlatıldı.\")\n    client_code(ConcreteCreator1())\n    print(\"\\n\")\n\n    print(\"Uygulama: ConcreteCreator2 ile başlatıldı.\")\n    client_code(ConcreteCreator2())\n","python",[57,959,960,965,970,974,979,984,989,994,998,1003,1008,1013,1018,1022,1026,1031,1035,1040,1044,1048,1053,1057,1062,1066,1070,1075,1079,1084,1088,1092,1096,1101,1105,1110,1114,1118,1123,1127,1132,1136,1140,1145,1150,1155,1159,1163,1168,1173,1178,1183,1187,1192],{"__ignoreMap":236},[240,961,962],{"class":242,"line":243},[240,963,964],{},"from __future__ import annotations\n",[240,966,967],{"class":242,"line":249},[240,968,969],{},"from abc import ABC, abstractmethod\n",[240,971,972],{"class":242,"line":255},[240,973,271],{"emptyLinePlaceholder":270},[240,975,976],{"class":242,"line":261},[240,977,978],{},"class Creator(ABC):\n",[240,980,981],{"class":242,"line":267},[240,982,983],{},"    @abstractmethod\n",[240,985,986],{"class":242,"line":274},[240,987,988],{},"    def factory_method(self) -> Product:\n",[240,990,991],{"class":242,"line":280},[240,992,993],{},"        pass\n",[240,995,996],{"class":242,"line":286},[240,997,271],{"emptyLinePlaceholder":270},[240,999,1000],{"class":242,"line":292},[240,1001,1002],{},"    def some_operation(self) -> str:\n",[240,1004,1005],{"class":242,"line":298},[240,1006,1007],{},"        product = self.factory_method()\n",[240,1009,1010],{"class":242,"line":304},[240,1011,1012],{},"        result = f\"Creator: Aynı oluşturucu kodu şununla çalıştı: {product.operation()}\"\n",[240,1014,1015],{"class":242,"line":309},[240,1016,1017],{},"        return result\n",[240,1019,1020],{"class":242,"line":314},[240,1021,271],{"emptyLinePlaceholder":270},[240,1023,1024],{"class":242,"line":320},[240,1025,271],{"emptyLinePlaceholder":270},[240,1027,1028],{"class":242,"line":325},[240,1029,1030],{},"class ConcreteCreator1(Creator):\n",[240,1032,1033],{"class":242,"line":331},[240,1034,988],{},[240,1036,1037],{"class":242,"line":336},[240,1038,1039],{},"        return ConcreteProduct1()\n",[240,1041,1042],{"class":242,"line":341},[240,1043,271],{"emptyLinePlaceholder":270},[240,1045,1046],{"class":242,"line":346},[240,1047,271],{"emptyLinePlaceholder":270},[240,1049,1050],{"class":242,"line":352},[240,1051,1052],{},"class ConcreteCreator2(Creator):\n",[240,1054,1055],{"class":242,"line":358},[240,1056,988],{},[240,1058,1059],{"class":242,"line":364},[240,1060,1061],{},"        return ConcreteProduct2()\n",[240,1063,1064],{"class":242,"line":370},[240,1065,271],{"emptyLinePlaceholder":270},[240,1067,1068],{"class":242,"line":375},[240,1069,271],{"emptyLinePlaceholder":270},[240,1071,1072],{"class":242,"line":381},[240,1073,1074],{},"class Product(ABC):\n",[240,1076,1077],{"class":242,"line":387},[240,1078,983],{},[240,1080,1081],{"class":242,"line":393},[240,1082,1083],{},"    def operation(self) -> str:\n",[240,1085,1086],{"class":242,"line":399},[240,1087,993],{},[240,1089,1090],{"class":242,"line":404},[240,1091,271],{"emptyLinePlaceholder":270},[240,1093,1094],{"class":242,"line":409},[240,1095,271],{"emptyLinePlaceholder":270},[240,1097,1098],{"class":242,"line":414},[240,1099,1100],{},"class ConcreteProduct1(Product):\n",[240,1102,1103],{"class":242,"line":420},[240,1104,1083],{},[240,1106,1107],{"class":242,"line":426},[240,1108,1109],{},"        return \"{ConcreteProduct1 Sonucu}\"\n",[240,1111,1112],{"class":242,"line":432},[240,1113,271],{"emptyLinePlaceholder":270},[240,1115,1116],{"class":242,"line":438},[240,1117,271],{"emptyLinePlaceholder":270},[240,1119,1120],{"class":242,"line":443},[240,1121,1122],{},"class ConcreteProduct2(Product):\n",[240,1124,1125],{"class":242,"line":448},[240,1126,1083],{},[240,1128,1129],{"class":242,"line":453},[240,1130,1131],{},"        return \"{ConcreteProduct2 Sonucu}\"\n",[240,1133,1134],{"class":242,"line":459},[240,1135,271],{"emptyLinePlaceholder":270},[240,1137,1138],{"class":242,"line":464},[240,1139,271],{"emptyLinePlaceholder":270},[240,1141,1142],{"class":242,"line":470},[240,1143,1144],{},"def client_code(creator: Creator) -> None:\n",[240,1146,1147],{"class":242,"line":475},[240,1148,1149],{},"    print(f\"İstemci: Oluşturucu sınıfından bağımsız çalışıyorum.\\n\"\n",[240,1151,1152],{"class":242,"line":820},[240,1153,1154],{},"          f\"{creator.some_operation()}\", end=\"\")\n",[240,1156,1157],{"class":242,"line":826},[240,1158,271],{"emptyLinePlaceholder":270},[240,1160,1161],{"class":242,"line":831},[240,1162,271],{"emptyLinePlaceholder":270},[240,1164,1165],{"class":242,"line":836},[240,1166,1167],{},"if __name__ == \"__main__\":\n",[240,1169,1170],{"class":242,"line":841},[240,1171,1172],{},"    print(\"Uygulama: ConcreteCreator1 ile başlatıldı.\")\n",[240,1174,1175],{"class":242,"line":847},[240,1176,1177],{},"    client_code(ConcreteCreator1())\n",[240,1179,1180],{"class":242,"line":852},[240,1181,1182],{},"    print(\"\\n\")\n",[240,1184,1185],{"class":242,"line":857},[240,1186,271],{"emptyLinePlaceholder":270},[240,1188,1189],{"class":242,"line":862},[240,1190,1191],{},"    print(\"Uygulama: ConcreteCreator2 ile başlatıldı.\")\n",[240,1193,1194],{"class":242,"line":868},[240,1195,1196],{},"    client_code(ConcreteCreator2())\n",[90,1198],{},[93,1200,1202],{"id":1201},"sıkça-sorulan-sorular-faq","Sıkça Sorulan Sorular (FAQ)",[621,1204,1206],{"id":1205},"basit-fabrika-simple-factory-ile-fabrika-metodu-factory-method-arasındaki-fark-nedir","Basit Fabrika (Simple Factory) ile Fabrika Metodu (Factory Method) arasındaki fark nedir?",[47,1208,1209,1226],{},[50,1210,1211,1214,1215,593,1218,1221,1222,1225],{},[43,1212,1213],{},"Simple Factory:"," Genellikle tek bir sınıftır ve parametreye göre (örn: ",[57,1216,1217],{},"\"SMS\"",[57,1219,1220],{},"\"EMAIL\"",") ",[57,1223,1224],{},"switch-case"," kullanarak nesne üretip döner. Polymorphism ve inheritance içermez.",[50,1227,1228,1231,1232,1235],{},[43,1229,1230],{},"Factory Method:"," Nesne üretme işini doğrudan bir sınıfa değil, kalıtım (inheritance) yoluyla alt sınıflara bırakır. Her ürün için ayrı bir oluşturucu sınıf (",[57,1233,1234],{},"SmsNotificationCreator"," gibi) bulunur ve yeni bir ürün eklenirken mevcut sınıflara dokunulmaz.",[621,1237,1239],{"id":1238},"neden-constructor-yapıcı-metot-yerine-nesne-havuzlarında-factory-method-kullanılır","Neden Constructor (Yapıcı Metot) yerine nesne havuzlarında Factory Method kullanılır?",[11,1241,1242,1243,589,1246,1249,1250,1253],{},"Nesne yönelimli dillerde yapıcı metotlar (",[57,1244,1245],{},"__construct()",[57,1247,1248],{},"__init__()"," vb.) tanım gereği her çağrıldığında bellekte ",[43,1251,1252],{},"yeni bir nesne"," oluşturmak zorundadır. Ancak veritabanı bağlantısı gibi ağır nesneleri tekrar kullanmak (pooling) istediğimizde yapıcı metotlar işe yaramaz. Fabrika metotları ise normal metotlar oldukları için statik bir dizi veya havuzdan daha önce oluşturulmuş boşta duran eski bir nesneyi döndürebilirler.",[90,1255],{},[93,1257,1259],{"id":1258},"diğer-tasarım-kalıplarıdesign-patterns","Diğer Tasarım Kalıpları\u002FDesign Patterns",[11,1261,1262],{},[43,1263,1264],{},"Oluşumsal Kalıplar (Creational Patterns)",[11,1266,1267,1270,1271,1270,1274,1270,1277,1270,1280],{},[15,1268,500],{"href":1269},"\u002Ftr\u002Ftasarim-kaliplari-design-patterns-factory-method-nedir",",\n",[15,1272,503],{"href":1273},"\u002Ftr\u002Ftasarim-kaliplari-design-patterns-abstract-factory-nedir",[15,1275,596],{"href":1276},"\u002Ftr\u002Fbuilder-tasarim-deseni-nedir",[15,1278,592],{"href":1279},"\u002Ftr\u002Fprototype-tasarim-deseni-nedir",[15,1281,1283],{"href":1282},"\u002Ftr\u002Fsingleton-tasarim-deseni-nedir","Singleton",[11,1285,1286],{},[43,1287,1288],{},"Yapısal Kalıplar (Structural Patterns)",[11,1290,1291,1270,1295,1270,1299,1270,1303,1270,1307,1270,1311,1270,1315],{},[15,1292,1294],{"href":1293},"\u002Ftr\u002Fadapter-tasarim-deseni-nedir","Adapter",[15,1296,1298],{"href":1297},"\u002Ftr\u002Fbridge-tasarim-deseni-nedir","Bridge",[15,1300,1302],{"href":1301},"\u002Ftr\u002Fcomposite-tasarim-deseni-nedir","Composite",[15,1304,1306],{"href":1305},"\u002Ftr\u002Fdecorator-tasarim-deseni-nedir","Decorator",[15,1308,1310],{"href":1309},"\u002Ftr\u002Ffacade-tasarim-deseni-nedir","Facade",[15,1312,1314],{"href":1313},"\u002Ftr\u002Fflyweight-tasarim-deseni-nedir","Flyweight",[15,1316,1318],{"href":1317},"\u002Ftr\u002Fproxy-tasarim-deseni-nedir","Proxy",[11,1320,1321],{},[43,1322,1323],{},"Davranışsal Kalıplar (Behavioral Patterns)",[11,1325,1326,1270,1330,1270,1334,1270,1338,1270,1342,1270,1346,1270,1350,1270,1354,1270,1358,1270,1361],{},[15,1327,1329],{"href":1328},"\u002Ftr\u002Fchain-of-responsibility-deseni-nedir","Chain of Responsibility",[15,1331,1333],{"href":1332},"\u002Ftr\u002Fcommand-tasarim-deseni-nedir","Command",[15,1335,1337],{"href":1336},"\u002Ftr\u002Fiterator-tasarim-deseni-nedir","Iterator",[15,1339,1341],{"href":1340},"\u002Ftr\u002Fmediator-tasarim-deseni-nedir","Mediator",[15,1343,1345],{"href":1344},"\u002Ftr\u002Fmemento-tasarim-deseni-nedir","Memento",[15,1347,1349],{"href":1348},"\u002Ftr\u002Fobserver-tasarim-deseni-nedir","Observer",[15,1351,1353],{"href":1352},"\u002Ftr\u002Fstate-tasarim-deseni-nedir","State",[15,1355,1357],{"href":1356},"\u002Ftr\u002Fstrategy-tasarim-deseni-nedir","Strategy",[15,1359,612],{"href":1360},"\u002Ftr\u002Ftemplate-method-tasarim-deseni-nedir",[15,1362,1364],{"href":1363},"\u002Ftr\u002Fvisitor-tasarim-deseni-nedir","Visitor",[1366,1367,1368],"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":236,"searchDepth":249,"depth":249,"links":1370},[1371,1372,1373,1374,1375,1376,1377,1378,1382,1386],{"id":95,"depth":249,"text":96},{"id":104,"depth":249,"text":105},{"id":145,"depth":249,"text":146},{"id":221,"depth":249,"text":222},{"id":482,"depth":249,"text":483},{"id":551,"depth":249,"text":552},{"id":577,"depth":249,"text":578},{"id":618,"depth":249,"text":619,"children":1379},[1380,1381],{"id":623,"depth":255,"text":624},{"id":951,"depth":255,"text":952},{"id":1201,"depth":249,"text":1202,"children":1383},[1384,1385],{"id":1205,"depth":255,"text":1206},{"id":1238,"depth":255,"text":1239},{"id":1258,"depth":249,"text":1259},[1388],"technical",null,"2021-07-24","Factory Method (Fabrika Metodu) tasarım kalıbını, kullanım senaryolarını, nesne havuzu optimizasyonlarını ve PHP\u002FPython örneklerini öğrenin.",false,"md","\u002Fimages\u002Fposts\u002F2021\u002F07\u002Ffactory-method-en1.avif",{},{"title":6,"description":1391},"tasarim-kaliplari-design-patterns-factory-method-nedir","tr\u002Ftasarim-kaliplari-design-patterns-factory-method-nedir",[1400,1401],"design-patterns","ipucu","0PnhyfPerxxAGdR6BkJXaSx-mhNdZb5IMimC0oM-fS0",{"prev":1404,"next":1406,"others":1409,"lucky":1519,"readingTime":274},{"path":17,"title":1405},"Design Patterns \u002F Tasarım Desenleri nedir?",{"path":1407,"title":1408},"\u002Ftr\u002Fvue-3-hakkinda-bilmeniz-gerekenler-yenilikler","Vue 3 Hakkında Bilmeniz Gerekenler ve Yenilikler",[1410,1413,1416,1418,1420,1423,1426,1429,1432,1435,1437,1440,1443,1446,1449,1452,1455,1458,1461,1464,1466,1467,1470,1472,1474,1477,1479,1482,1485,1488,1491,1494,1496,1499,1502,1504,1507,1510,1513,1516],{"path":1411,"title":1412},"\u002Ftr\u002Fopenlitespeed-ve-litespeed-enterprisei-reverse-proxy-olarak-kullanmak","OpenLiteSpeed ve LiteSpeed Enterprise Sunucularını Reverse Proxy Olarak Kullanmak",{"path":1414,"title":1415},"\u002Ftr\u002Fmerhaba-tailwind-css","Merhaba Tailwind CSS",{"path":1282,"title":1417},"Singleton Tasarım Deseni Nedir?",{"path":1344,"title":1419},"Memento Tasarım Deseni Nedir?",{"path":1421,"title":1422},"\u002Ftr\u002Ftailwind-css-nerede-kullanilir-tailwind-css-nerede-kullanilmaz","Tailwind CSS Nerede Kullanılır? Tailwind CSS Nerede Kullanılmaz?",{"path":1424,"title":1425},"\u002Ftr\u002Fes16-nedir-ecmascript-2025-nedir","ES16 nedir? ECMAScript 2025 nedir?",{"path":1427,"title":1428},"\u002Ftr\u002Fmutable-ve-immutable-kavrami","Mutable ve Immutable Kavramları Nedir?",{"path":1430,"title":1431},"\u002Ftr\u002Fvue-js-nedir","Vue.js Nedir? Yeni Başlayanlar İçin Rehber",{"path":1433,"title":1434},"\u002Ftr\u002Frestful-api-bilesenleri","RESTful API Bileşenleri",{"path":1328,"title":1436},"Chain of Responsibility Deseni Nedir?",{"path":1438,"title":1439},"\u002Ftr\u002Fdocker-swarm-nedir","Docker Swarm Nedir?",{"path":1441,"title":1442},"\u002Ftr\u002Fmerhaba-phalcon-framework","Merhaba Phalcon Framework",{"path":1444,"title":1445},"\u002Ftr\u002Frest-api-kimlik-dogrulama-nasil-yapilir","REST API Kimlik Doğrulama Nasıl Yapılır?",{"path":1447,"title":1448},"\u002Ftr\u002Fmerhabadunya","Merhaba Dünya",{"path":1450,"title":1451},"\u002Ftr\u002Fes6-nedir-ecmascript-2015-nedir","ES6 Nedir? ECMAScript 2015 Nedir?",{"path":1453,"title":1454},"\u002Ftr\u002Fubuntu-20-04-composer-kurulumu","Ubuntu 20.04 - Composer Kurulumu",{"path":1456,"title":1457},"\u002Ftr\u002Fphp-ve-makine-ogrenimi-php-ml-kutuphanesi","PHP ve Makine Öğrenimi: PHP-ML Kütüphanesi ile Pratik Çözümler",{"path":1459,"title":1460},"\u002Ftr\u002Fes17-nedir-ecmascript-2026-nedir","ES17 nedir? ECMAScript 2026 nedir?",{"path":1462,"title":1463},"\u002Ftr\u002Fes10-nedir-ecmascript-2019-nedir","ES10 Nedir? ECMAScript 2019 Nedir?",{"path":1279,"title":1465},"Prototype Tasarım Deseni Nedir?",{"path":17,"title":1405},{"path":1468,"title":1469},"\u002Ftr\u002Fdocker-ile-mariadb-kurulumu","Docker ile MariaDB Kurulumu",{"path":1348,"title":1471},"Observer Tasarım Deseni Nedir?",{"path":1293,"title":1473},"Adapter Tasarım Deseni Nedir?",{"path":1475,"title":1476},"\u002Ftr\u002Fgo-ve-degiskenler","Go ve Değişkenler",{"path":1352,"title":1478},"State Tasarım Deseni Nedir?",{"path":1480,"title":1481},"\u002Ftr\u002Ffactory-method-ve-abstract-factory-farki-nedir","Factory Method ve Abstract Factory Farkı Nedir?",{"path":1483,"title":1484},"\u002Ftr\u002Fes7-nedir-ecmascript-2016-nedir","ES7 Nedir? ECMAScript 2016 Nedir?",{"path":1486,"title":1487},"\u002Ftr\u002Fmerhaba-gluster","Merhaba Gluster: Dağıtık Dosya Sistemi Nedir?",{"path":1489,"title":1490},"\u002Ftr\u002Fnostalji-ibibik-online","Nostalji: İbibik Online (1998'den Bir Web Macerası)",{"path":1492,"title":1493},"\u002Ftr\u002Ffull-stack-proje-agaci","Full-Stack Proje Yol Haritası ve İçindekiler",{"path":1356,"title":1495},"Strategy Tasarım Deseni Nedir?",{"path":1497,"title":1498},"\u002Ftr\u002Flitespeed-web-server-performans-artisi","Konfor Alanından Çıkıp, Konforlu Bir VPS'e Geçmek: LiteSpeed Web Server",{"path":1500,"title":1501},"\u002Ftr\u002Fapi-gateway-nedir","API Gateway Nedir? Ne İşe Yarar?",{"path":1340,"title":1503},"Mediator Tasarım Deseni Nedir?",{"path":1505,"title":1506},"\u002Ftr\u002Fcodeserver-nedir-codeserver-nasil-kurulur","Code-Server Nedir? Bulutta VS Code Geliştirme Ortamı Kurulumu",{"path":1508,"title":1509},"\u002Ftr\u002Fubuntu-24-04-uzerinde-cyberpanel-kurulumu","Ubuntu 24.04 LTS ve 22.04 LTS Üzerinde CyberPanel Kurulumu",{"path":1511,"title":1512},"\u002Ftr\u002Fgraylog-nedir-docker-ile-nasil-kurulur","Graylog Nedir? Docker Compose ile Adım Adım Kurulum Rehberi",{"path":1514,"title":1515},"\u002Ftr\u002Fheadless-wordpress-hakkinda-her-sey","Headless WordPress Hakkında Her Şey",{"path":1517,"title":1518},"\u002Ftr\u002Ftemiz-moduler-ve-yeniden-kullanilabilir-php-kodu-yazma-rehberi","PHP'de Temiz, Modüler ve Yeniden Kullanılabilir Kod Yazma Rehberi",{"path":1520,"title":1521},"\u002Ftr\u002Fearly-return-erken-donus-nedir","Early Return \u002F Erken Dönüş nedir?",[1523,1525,1528,1531],{"path":1293,"title":1473,"date":1524},"2021-08-21",{"path":1276,"title":1526,"date":1527},"Builder Tasarım Deseni Nedir?","2021-08-03",{"path":1273,"title":1529,"date":1530},"Abstract Factory Tasarım Deseni Nedir?","2021-07-27",{"path":1363,"title":1532,"date":1533},"Visitor Tasarım Deseni Nedir?","2021-10-09",[1535,1537,1541],{"path":1424,"title":1425,"date":1536},"2026-06-20",{"path":1538,"title":1539,"date":1540},"\u002Ftr\u002Fphp-8-0-yenilikler","Merhaba PHP 8: Modern PHP 8.x Çağı","2020-12-09",{"path":1301,"title":1542,"date":1543},"Composite Tasarım Deseni Nedir?","2021-09-11",1782142081927]