[{"data":1,"prerenderedAt":2030},["ShallowReactive",2],{"post-\u002Ftr\u002Fbuilder-tasarim-deseni-nedir":3},{"page":4,"translation":1868,"nav":1884,"related":2007,"random":2018},{"id":5,"title":6,"body":7,"categories":1866,"category":1868,"date":1869,"description":1870,"draft":1871,"extension":1872,"image":1873,"kind":1868,"lang":578,"meta":1874,"navigation":291,"path":1752,"readingTime":282,"seo":1875,"slug":1876,"stem":1877,"tags":1878,"translationKey":1868,"type":1867,"updated":1868,"__hash__":1883},"postsTr\u002Ftr\u002Fbuilder-tasarim-deseni-nedir.md","Builder Tasarım Deseni Nedir?",{"type":8,"value":9,"toc":1846},"minimark",[10,20,33,36,90,93,98,103,105,109,112,119,126,140,146,152,163,165,169,175,181,194,197,203,205,209,215,221,224,226,230,233,518,521,565,567,571,644,646,650,670,672,676,705,707,711,716,1231,1235,1691,1693,1697,1701,1704,1708,1723,1727,1730,1732,1736,1741,1760,1765,1795,1800,1842],[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,56,79],"ul",{},[50,51,52,55],"li",{},[43,53,54],{},"Amaç:"," Karmaşık nesnelerin adım adım (step-by-step) kurulmasını sağlar. Aynı kurucu kod ile farklı tür ve gösterimdeki nesneleri üretmeye olanak tanır.",[50,57,58,61,62,66,67,70,71,74,75,78],{},[43,59,60],{},"Kilit Yapılar:"," Builder Arayüzü (",[63,64,65],"code",{},"Builder","), Somut Builder (",[63,68,69],{},"ConcreteBuilder","), Yönetici (",[63,72,73],{},"Director","), Ürün (",[63,76,77],{},"Product",").",[50,80,81,84,85,89],{},[43,82,83],{},"Motto:"," ",[86,87,88],"em",{},"Separate the construction of a complex object from its representation"," (Karmaşık nesnenin kurulumunu temsili biçiminden ayır).",[91,92],"hr",{},[94,95,97],"h2",{"id":96},"builder-tasarım-deseninin-amacı","Builder Tasarım Deseninin Amacı",[11,99,100,102],{},[43,101,65],{}," (Kurucu\u002Fİnşaatçı), karmaşık nesnelerin adım adım inşa edilmesini sağlayan yaratımsal (creational) bir tasarım desenidir. Bu desen, aynı kurulum adımlarını kullanarak farklı tiplerde veya konfigürasyonlarda nesneler oluşturmanıza olanak tanır.",[91,104],{},[94,106,108],{"id":107},"sorun","Sorun",[11,110,111],{},"Çok sayıda alan (field) ve iç içe geçmiş nesne içeren karmaşık bir yapıyı kurmaya çalıştığınızı düşünün. Genellikle bu tip nesnelerin başlatma kodları, onlarca parametre alan devasa kurucu metotlara (constructor) veya doğrudan istemci kodun içerisine dağılmış uzun atamalara dönüşür.",[11,113,114],{},[115,116],"img",{"alt":117,"src":118},"Builder sorunu","\u002Fimages\u002Fbuilder-tasarim-deseni-nedir\u002Fproblem1.avif",[11,120,121,122,125],{},"Örneğin, bir ",[63,123,124],{},"House"," (Ev) nesnesini modelleyelim. Temel bir ev için duvarlar, kapılar, pencereler ve bir çatı yeterlidir. Ancak ya yüzme havuzlu, bahçeli, akıllı ev sistemine sahip lüks bir ev kurmak isterseniz?",[11,127,128,129,131,132,135,136,139],{},"İlk çözüm, ",[63,130,124],{}," sınıfını miras alan alt sınıflar (örn: ",[63,133,134],{},"HouseWithGarage",", ",[63,137,138],{},"HouseWithPool",") oluşturmaktır. Fakat her ek özellikte bu sınıf hiyerarşisi kontrolsüzce büyüyecektir.",[11,141,142,143,145],{},"İkinci çözüm, temel ",[63,144,124],{}," sınıfı içine tüm olası parametreleri alan devasa tek bir kurucu metot yazmaktır:",[11,147,148],{},[115,149],{"alt":150,"src":151},"Builder constructor sorunu","\u002Fimages\u002Fbuilder-tasarim-deseni-nedir\u002Fproblem2.avif",[11,153,154,155,158,159,162],{},"Bu yaklaşıma ",[43,156,157],{},"Teleskobik Kurucu (Telescoping Constructor)"," denir. Parametrelerin çoğu isteğe bağlı (optional) olduğu için, 10 evden 9'unda havuz parametresi boş (",[63,160,161],{},"null",") geçilecek ve kod okunabilirliği ciddi şekilde bozulacaktır.",[91,164],{},[94,166,168],{"id":167},"çözüm","Çözüm",[11,170,171,172,174],{},"Builder deseni, nesne kurulum kodunu kendi sınıfından çıkarıp ",[43,173,65],{}," adı verilen bağımsız nesnelere taşımayı önerir.",[11,176,177],{},[115,178],{"alt":179,"src":180},"Builder çözümü","\u002Fimages\u002Fbuilder-tasarim-deseni-nedir\u002Fsolution11.avif",[11,182,183,184,135,187,135,190,193],{},"Nesne kurulum süreci adımlara bölünür (",[63,185,186],{},"buildWalls",[63,188,189],{},"buildDoors",[63,191,192],{},"buildPool"," vb.). İstediğiniz ürünü oluşturmak için builder nesnesi üzerindeki adımları sırayla çağırırsınız. En büyük avantajı, sadece o ev için gerekli olan adımları çağırmanızın yeterli olmasıdır.",[11,195,196],{},"Farklı gösterimler (ahşap ev vs. taş ev) üretmek için aynı builder arayüzünü uygulayan alternatif somut builder sınıfları yazabilirsiniz:",[11,198,199],{},[115,200],{"alt":201,"src":202},"Farklı builder varyasyonları","\u002Fimages\u002Fbuilder-tasarim-deseni-nedir\u002Fbuilder-comic-1-en.avif",[91,204],{},[94,206,208],{"id":207},"director-yönetici-sınıfı","Director (Yönetici) Sınıfı",[11,210,211,212,214],{},"Süreci daha da optimize etmek için, builder adımlarını belirli şablonlara göre çağıran bir ",[43,213,73],{}," (Yönetici) sınıfı oluşturabilirsiniz. Director, adımların hangi sırada ve nasıl çağrılacağını bilir.",[11,216,217],{},[115,218],{"alt":219,"src":220},"Director konsepti","\u002Fimages\u002Fbuilder-tasarim-deseni-nedir\u002Fbuilder-comic-2-en.avif",[11,222,223],{},"Director sınıfı projenizde zorunlu değildir; istemci kod adımları doğrudan kendisi de tetikleyebilir. Ancak Director, yaygın kurulum şablonlarını tek bir yerde toplayıp tekrar kullanılabilir kılmak için faydalıdır.",[91,225],{},[94,227,229],{"id":228},"gerçek-hayat-senaryosu-sql-sorgu-oluşturucu-sql-query-builder","Gerçek Hayat Senaryosu: SQL Sorgu Oluşturucu (SQL Query Builder)",[11,231,232],{},"Farklı SQL lehçelerine göre (MySQL, PostgreSQL) sorgu inşa eden akıcı (fluent) bir PHP Query Builder örneği:",[234,235,240],"pre",{"className":236,"code":237,"language":238,"meta":239,"style":239},"language-php shiki shiki-themes github-light github-dark","\u002F\u002F 1. Ortak Builder Arayüzü\ninterface SQLQueryBuilder {\n    public function select(string $table, array $fields): SQLQueryBuilder;\n    public function where(string $field, string $value, string $operator = '='): SQLQueryBuilder;\n    public function limit(int $start, int $offset): SQLQueryBuilder;\n    public function getSQL(): string;\n}\n\n\u002F\u002F 2. MySQL için Somut Builder\nclass MySQLQueryBuilder implements SQLQueryBuilder {\n    private stdClass $query;\n\n    public function __construct() {\n        $this->reset();\n    }\n\n    private function reset(): void {\n        $this->query = new stdClass();\n    }\n\n    public function select(string $table, array $fields): SQLQueryBuilder {\n        $this->query->select = \"SELECT \" . implode(\", \", $fields) . \" FROM \" . $table;\n        return $this; \u002F\u002F Fluent interface için nesneyi dönüyoruz\n    }\n\n    public function where(string $field, string $value, string $operator = '='): SQLQueryBuilder {\n        $this->query->where[] = \"$field $operator '$value'\";\n        return $this;\n    }\n\n    public function limit(int $start, int $offset): SQLQueryBuilder {\n        $this->query->limit = \"LIMIT \" . $start . \", \" . $offset;\n        return $this;\n    }\n\n    public function getSQL(): string {\n        $sql = $this->query->select;\n        if (!empty($this->query->where)) {\n            $sql .= \" WHERE \" . implode(\" AND \", $this->query->where);\n        }\n        if (isset($this->query->limit)) {\n            $sql .= \" \" . $this->query->limit;\n        }\n        $sql .= \";\";\n        $this->reset();\n        return $sql;\n    }\n}\n","php","",[63,241,242,250,256,262,268,274,280,286,293,299,305,311,316,322,328,334,339,345,351,356,361,367,373,379,384,389,395,401,407,412,417,423,429,434,439,444,450,456,462,468,474,480,486,491,497,502,508,513],{"__ignoreMap":239},[243,244,247],"span",{"class":245,"line":246},"line",1,[243,248,249],{},"\u002F\u002F 1. Ortak Builder Arayüzü\n",[243,251,253],{"class":245,"line":252},2,[243,254,255],{},"interface SQLQueryBuilder {\n",[243,257,259],{"class":245,"line":258},3,[243,260,261],{},"    public function select(string $table, array $fields): SQLQueryBuilder;\n",[243,263,265],{"class":245,"line":264},4,[243,266,267],{},"    public function where(string $field, string $value, string $operator = '='): SQLQueryBuilder;\n",[243,269,271],{"class":245,"line":270},5,[243,272,273],{},"    public function limit(int $start, int $offset): SQLQueryBuilder;\n",[243,275,277],{"class":245,"line":276},6,[243,278,279],{},"    public function getSQL(): string;\n",[243,281,283],{"class":245,"line":282},7,[243,284,285],{},"}\n",[243,287,289],{"class":245,"line":288},8,[243,290,292],{"emptyLinePlaceholder":291},true,"\n",[243,294,296],{"class":245,"line":295},9,[243,297,298],{},"\u002F\u002F 2. MySQL için Somut Builder\n",[243,300,302],{"class":245,"line":301},10,[243,303,304],{},"class MySQLQueryBuilder implements SQLQueryBuilder {\n",[243,306,308],{"class":245,"line":307},11,[243,309,310],{},"    private stdClass $query;\n",[243,312,314],{"class":245,"line":313},12,[243,315,292],{"emptyLinePlaceholder":291},[243,317,319],{"class":245,"line":318},13,[243,320,321],{},"    public function __construct() {\n",[243,323,325],{"class":245,"line":324},14,[243,326,327],{},"        $this->reset();\n",[243,329,331],{"class":245,"line":330},15,[243,332,333],{},"    }\n",[243,335,337],{"class":245,"line":336},16,[243,338,292],{"emptyLinePlaceholder":291},[243,340,342],{"class":245,"line":341},17,[243,343,344],{},"    private function reset(): void {\n",[243,346,348],{"class":245,"line":347},18,[243,349,350],{},"        $this->query = new stdClass();\n",[243,352,354],{"class":245,"line":353},19,[243,355,333],{},[243,357,359],{"class":245,"line":358},20,[243,360,292],{"emptyLinePlaceholder":291},[243,362,364],{"class":245,"line":363},21,[243,365,366],{},"    public function select(string $table, array $fields): SQLQueryBuilder {\n",[243,368,370],{"class":245,"line":369},22,[243,371,372],{},"        $this->query->select = \"SELECT \" . implode(\", \", $fields) . \" FROM \" . $table;\n",[243,374,376],{"class":245,"line":375},23,[243,377,378],{},"        return $this; \u002F\u002F Fluent interface için nesneyi dönüyoruz\n",[243,380,382],{"class":245,"line":381},24,[243,383,333],{},[243,385,387],{"class":245,"line":386},25,[243,388,292],{"emptyLinePlaceholder":291},[243,390,392],{"class":245,"line":391},26,[243,393,394],{},"    public function where(string $field, string $value, string $operator = '='): SQLQueryBuilder {\n",[243,396,398],{"class":245,"line":397},27,[243,399,400],{},"        $this->query->where[] = \"$field $operator '$value'\";\n",[243,402,404],{"class":245,"line":403},28,[243,405,406],{},"        return $this;\n",[243,408,410],{"class":245,"line":409},29,[243,411,333],{},[243,413,415],{"class":245,"line":414},30,[243,416,292],{"emptyLinePlaceholder":291},[243,418,420],{"class":245,"line":419},31,[243,421,422],{},"    public function limit(int $start, int $offset): SQLQueryBuilder {\n",[243,424,426],{"class":245,"line":425},32,[243,427,428],{},"        $this->query->limit = \"LIMIT \" . $start . \", \" . $offset;\n",[243,430,432],{"class":245,"line":431},33,[243,433,406],{},[243,435,437],{"class":245,"line":436},34,[243,438,333],{},[243,440,442],{"class":245,"line":441},35,[243,443,292],{"emptyLinePlaceholder":291},[243,445,447],{"class":245,"line":446},36,[243,448,449],{},"    public function getSQL(): string {\n",[243,451,453],{"class":245,"line":452},37,[243,454,455],{},"        $sql = $this->query->select;\n",[243,457,459],{"class":245,"line":458},38,[243,460,461],{},"        if (!empty($this->query->where)) {\n",[243,463,465],{"class":245,"line":464},39,[243,466,467],{},"            $sql .= \" WHERE \" . implode(\" AND \", $this->query->where);\n",[243,469,471],{"class":245,"line":470},40,[243,472,473],{},"        }\n",[243,475,477],{"class":245,"line":476},41,[243,478,479],{},"        if (isset($this->query->limit)) {\n",[243,481,483],{"class":245,"line":482},42,[243,484,485],{},"            $sql .= \" \" . $this->query->limit;\n",[243,487,489],{"class":245,"line":488},43,[243,490,473],{},[243,492,494],{"class":245,"line":493},44,[243,495,496],{},"        $sql .= \";\";\n",[243,498,500],{"class":245,"line":499},45,[243,501,327],{},[243,503,505],{"class":245,"line":504},46,[243,506,507],{},"        return $sql;\n",[243,509,511],{"class":245,"line":510},47,[243,512,333],{},[243,514,516],{"class":245,"line":515},48,[243,517,285],{},[11,519,520],{},"İstemci kodu bu builder'ı zincirleme çağrılarla (method chaining) çok temiz şekilde kullanabilir:",[234,522,524],{"className":236,"code":523,"language":238,"meta":239,"style":239},"$query = (new MySQLQueryBuilder())\n    ->select(\"users\", [\"id\", \"username\", \"email\"])\n    ->where(\"status\", \"active\")\n    ->limit(0, 10)\n    ->getSQL();\n\necho $query;\n\u002F\u002F Çıktı: SELECT id, username, email FROM users WHERE status = 'active' LIMIT 0, 10;\n",[63,525,526,531,536,541,546,551,555,560],{"__ignoreMap":239},[243,527,528],{"class":245,"line":246},[243,529,530],{},"$query = (new MySQLQueryBuilder())\n",[243,532,533],{"class":245,"line":252},[243,534,535],{},"    ->select(\"users\", [\"id\", \"username\", \"email\"])\n",[243,537,538],{"class":245,"line":258},[243,539,540],{},"    ->where(\"status\", \"active\")\n",[243,542,543],{"class":245,"line":264},[243,544,545],{},"    ->limit(0, 10)\n",[243,547,548],{"class":245,"line":270},[243,549,550],{},"    ->getSQL();\n",[243,552,553],{"class":245,"line":276},[243,554,292],{"emptyLinePlaceholder":291},[243,556,557],{"class":245,"line":282},[243,558,559],{},"echo $query;\n",[243,561,562],{"class":245,"line":288},[243,563,564],{},"\u002F\u002F Çıktı: SELECT id, username, email FROM users WHERE status = 'active' LIMIT 0, 10;\n",[91,566],{},[94,568,570],{"id":569},"builder-vs-abstract-factory-vs-factory-method","Builder vs Abstract Factory vs Factory Method",[572,573,574,593],"table",{},[575,576,577],"thead",{},[578,579,580,585,587,590],"tr",{},[581,582,584],"th",{"align":583},"left","Kriter",[581,586,65],{"align":583},[581,588,589],{"align":583},"Abstract Factory",[581,591,592],{"align":583},"Factory Method",[594,595,596,613,628],"tbody",{},[578,597,598,604,607,610],{},[599,600,601],"td",{"align":583},[43,602,603],{},"Üretim Biçimi",[599,605,606],{"align":583},"Nesneyi adım adım (step-by-step) kurar.",[599,608,609],{"align":583},"İlişkili nesne ailelerini bir bütün olarak üretir.",[599,611,612],{"align":583},"Tek bir somut nesneyi hemen üretir.",[578,614,615,620,623,626],{},[599,616,617],{"align":583},[43,618,619],{},"Çıktı Kontrolü",[599,621,622],{"align":583},"Son aşamaya kadar yarım kalmış ürünü dışarıya vermez.",[599,624,625],{"align":583},"Nesneyi tek çağrıda tamamen hazır olarak döner.",[599,627,625],{"align":583},[578,629,630,635,638,641],{},[599,631,632],{"align":583},[43,633,634],{},"Kullanım Amacı",[599,636,637],{"align":583},"Kurulumu karmaşık olan tekil nesneler.",[599,639,640],{"align":583},"Birbiriyle uyumlu çoklu ürün aileleri.",[599,642,643],{"align":583},"Ürünün türetilme işini alt sınıfa delege etmek.",[91,645],{},[94,647,649],{"id":648},"uygulanabilirlik","Uygulanabilirlik",[47,651,652,658,664],{},[50,653,654,657],{},[43,655,656],{},"Teleskobik Kurucudan Kaçınmak:"," Bir sınıfın yapıcı metodu çok fazla parametre alıyorsa ve bu parametrelerin çoğu isteğe bağlıysa kullanın.",[50,659,660,663],{},[43,661,662],{},"Farklı Ürün Varyasyonları:"," Kodunuzun, benzer adımlardan geçerek farklı tipte (örn: ahşap\u002Ftaş ev) nesneler üretmesini istediğinizde kullanın.",[50,665,666,669],{},[43,667,668],{},"Kompozit (Composite) Nesneler:"," Ağaç yapısındaki gibi karmaşık nesne yapılarını adım adım inşa etmek istediğinizde kullanın.",[91,671],{},[94,673,675],{"id":674},"diğer-tasarım-desenleri-ile-i̇lişkisi","Diğer Tasarım Desenleri ile İlişkisi",[47,677,678,687,695],{},[50,679,680,681,683,684,686],{},"Genellikle tasarımlar basit olan ",[43,682,592],{}," ile başlar ve gereksinimler karmaşıklaştıkça ",[43,685,65],{}," desenine evrilir.",[50,688,689,691,692,694],{},[43,690,589],{}," nesneyi anında teslim ederken, ",[43,693,65],{}," nesneyi teslim etmeden önce kurulum adımları koşturmanıza olanak tanır.",[50,696,697,698,700,701,704],{},"Kurulum adımlarını kontrol eden ",[43,699,73],{}," sınıfları çoğunlukla ",[43,702,703],{},"Singleton"," olarak tasarlanır.",[91,706],{},[94,708,710],{"id":709},"builder-tasarım-deseni-kod-örnekleri","Builder Tasarım Deseni Kod Örnekleri",[712,713,715],"h3",{"id":714},"örnek-php-kodu","Örnek PHP Kodu",[234,717,719],{"className":236,"code":718,"language":238,"meta":239,"style":239},"\u003C?php\n\nnamespace RefactoringGuru\\Builder\\Conceptual;\n\ninterface Builder\n{\n    public function producePartA(): void;\n    public function producePartB(): void;\n    public function producePartC(): void;\n}\n\nclass ConcreteBuilder1 implements Builder\n{\n    private Product1 $product;\n\n    public function __construct()\n    {\n        $this->reset();\n    }\n\n    public function reset(): void\n    {\n        $this->product = new Product1();\n    }\n\n    public function producePartA(): void\n    {\n        $this->product->parts[] = \"PartA1\";\n    }\n\n    public function producePartB(): void\n    {\n        $this->product->parts[] = \"PartB1\";\n    }\n\n    public function producePartC(): void\n    {\n        $this->product->parts[] = \"PartC1\";\n    }\n\n    public function getProduct(): Product1\n    {\n        $result = $this->product;\n        $this->reset();\n\n        return $result;\n    }\n}\n\nclass Product1\n{\n    public array $parts = [];\n\n    public function listParts(): void\n    {\n        echo \"Ürün parçaları: \" . implode(', ', $this->parts) . \"\\n\\n\";\n    }\n}\n\nclass Director\n{\n    private Builder $builder;\n\n    public function setBuilder(Builder $builder): void\n    {\n        $this->builder = $builder;\n    }\n\n    public function buildMinimalViableProduct(): void\n    {\n        $this->builder->producePartA();\n    }\n\n    public function buildFullFeaturedProduct(): void\n    {\n        $this->builder->producePartA();\n        $this->builder->producePartB();\n        $this->builder->producePartC();\n    }\n}\n\nfunction clientCode(Director $director)\n{\n    $builder = new ConcreteBuilder1();\n    $director->setBuilder($builder);\n\n    echo \"Standart Başlangıç Ürünü:\\n\";\n    $director->buildMinimalViableProduct();\n    $builder->getProduct()->listParts();\n\n    echo \"Standart Tam Donanımlı Ürün:\\n\";\n    $director->buildFullFeaturedProduct();\n    $builder->getProduct()->listParts();\n\n    echo \"Özel Tasarım Ürün (Director Olmadan):\\n\";\n    $builder->producePartA();\n    $builder->producePartC();\n    $builder->getProduct()->listParts();\n}\n\n$director = new Director();\nclientCode($director);\n",[63,720,721,726,730,735,739,744,749,754,759,764,768,772,777,781,786,790,795,800,804,808,812,817,821,826,830,834,839,843,848,852,856,861,865,870,874,878,883,887,892,896,900,905,909,914,918,922,927,931,935,940,946,951,957,962,968,973,979,984,989,994,1000,1005,1011,1016,1022,1027,1033,1038,1043,1049,1054,1060,1065,1070,1076,1081,1086,1092,1098,1103,1108,1113,1119,1124,1130,1136,1141,1147,1153,1159,1164,1170,1176,1181,1186,1192,1198,1204,1209,1214,1219,1225],{"__ignoreMap":239},[243,722,723],{"class":245,"line":246},[243,724,725],{},"\u003C?php\n",[243,727,728],{"class":245,"line":252},[243,729,292],{"emptyLinePlaceholder":291},[243,731,732],{"class":245,"line":258},[243,733,734],{},"namespace RefactoringGuru\\Builder\\Conceptual;\n",[243,736,737],{"class":245,"line":264},[243,738,292],{"emptyLinePlaceholder":291},[243,740,741],{"class":245,"line":270},[243,742,743],{},"interface Builder\n",[243,745,746],{"class":245,"line":276},[243,747,748],{},"{\n",[243,750,751],{"class":245,"line":282},[243,752,753],{},"    public function producePartA(): void;\n",[243,755,756],{"class":245,"line":288},[243,757,758],{},"    public function producePartB(): void;\n",[243,760,761],{"class":245,"line":295},[243,762,763],{},"    public function producePartC(): void;\n",[243,765,766],{"class":245,"line":301},[243,767,285],{},[243,769,770],{"class":245,"line":307},[243,771,292],{"emptyLinePlaceholder":291},[243,773,774],{"class":245,"line":313},[243,775,776],{},"class ConcreteBuilder1 implements Builder\n",[243,778,779],{"class":245,"line":318},[243,780,748],{},[243,782,783],{"class":245,"line":324},[243,784,785],{},"    private Product1 $product;\n",[243,787,788],{"class":245,"line":330},[243,789,292],{"emptyLinePlaceholder":291},[243,791,792],{"class":245,"line":336},[243,793,794],{},"    public function __construct()\n",[243,796,797],{"class":245,"line":341},[243,798,799],{},"    {\n",[243,801,802],{"class":245,"line":347},[243,803,327],{},[243,805,806],{"class":245,"line":353},[243,807,333],{},[243,809,810],{"class":245,"line":358},[243,811,292],{"emptyLinePlaceholder":291},[243,813,814],{"class":245,"line":363},[243,815,816],{},"    public function reset(): void\n",[243,818,819],{"class":245,"line":369},[243,820,799],{},[243,822,823],{"class":245,"line":375},[243,824,825],{},"        $this->product = new Product1();\n",[243,827,828],{"class":245,"line":381},[243,829,333],{},[243,831,832],{"class":245,"line":386},[243,833,292],{"emptyLinePlaceholder":291},[243,835,836],{"class":245,"line":391},[243,837,838],{},"    public function producePartA(): void\n",[243,840,841],{"class":245,"line":397},[243,842,799],{},[243,844,845],{"class":245,"line":403},[243,846,847],{},"        $this->product->parts[] = \"PartA1\";\n",[243,849,850],{"class":245,"line":409},[243,851,333],{},[243,853,854],{"class":245,"line":414},[243,855,292],{"emptyLinePlaceholder":291},[243,857,858],{"class":245,"line":419},[243,859,860],{},"    public function producePartB(): void\n",[243,862,863],{"class":245,"line":425},[243,864,799],{},[243,866,867],{"class":245,"line":431},[243,868,869],{},"        $this->product->parts[] = \"PartB1\";\n",[243,871,872],{"class":245,"line":436},[243,873,333],{},[243,875,876],{"class":245,"line":441},[243,877,292],{"emptyLinePlaceholder":291},[243,879,880],{"class":245,"line":446},[243,881,882],{},"    public function producePartC(): void\n",[243,884,885],{"class":245,"line":452},[243,886,799],{},[243,888,889],{"class":245,"line":458},[243,890,891],{},"        $this->product->parts[] = \"PartC1\";\n",[243,893,894],{"class":245,"line":464},[243,895,333],{},[243,897,898],{"class":245,"line":470},[243,899,292],{"emptyLinePlaceholder":291},[243,901,902],{"class":245,"line":476},[243,903,904],{},"    public function getProduct(): Product1\n",[243,906,907],{"class":245,"line":482},[243,908,799],{},[243,910,911],{"class":245,"line":488},[243,912,913],{},"        $result = $this->product;\n",[243,915,916],{"class":245,"line":493},[243,917,327],{},[243,919,920],{"class":245,"line":499},[243,921,292],{"emptyLinePlaceholder":291},[243,923,924],{"class":245,"line":504},[243,925,926],{},"        return $result;\n",[243,928,929],{"class":245,"line":510},[243,930,333],{},[243,932,933],{"class":245,"line":515},[243,934,285],{},[243,936,938],{"class":245,"line":937},49,[243,939,292],{"emptyLinePlaceholder":291},[243,941,943],{"class":245,"line":942},50,[243,944,945],{},"class Product1\n",[243,947,949],{"class":245,"line":948},51,[243,950,748],{},[243,952,954],{"class":245,"line":953},52,[243,955,956],{},"    public array $parts = [];\n",[243,958,960],{"class":245,"line":959},53,[243,961,292],{"emptyLinePlaceholder":291},[243,963,965],{"class":245,"line":964},54,[243,966,967],{},"    public function listParts(): void\n",[243,969,971],{"class":245,"line":970},55,[243,972,799],{},[243,974,976],{"class":245,"line":975},56,[243,977,978],{},"        echo \"Ürün parçaları: \" . implode(', ', $this->parts) . \"\\n\\n\";\n",[243,980,982],{"class":245,"line":981},57,[243,983,333],{},[243,985,987],{"class":245,"line":986},58,[243,988,285],{},[243,990,992],{"class":245,"line":991},59,[243,993,292],{"emptyLinePlaceholder":291},[243,995,997],{"class":245,"line":996},60,[243,998,999],{},"class Director\n",[243,1001,1003],{"class":245,"line":1002},61,[243,1004,748],{},[243,1006,1008],{"class":245,"line":1007},62,[243,1009,1010],{},"    private Builder $builder;\n",[243,1012,1014],{"class":245,"line":1013},63,[243,1015,292],{"emptyLinePlaceholder":291},[243,1017,1019],{"class":245,"line":1018},64,[243,1020,1021],{},"    public function setBuilder(Builder $builder): void\n",[243,1023,1025],{"class":245,"line":1024},65,[243,1026,799],{},[243,1028,1030],{"class":245,"line":1029},66,[243,1031,1032],{},"        $this->builder = $builder;\n",[243,1034,1036],{"class":245,"line":1035},67,[243,1037,333],{},[243,1039,1041],{"class":245,"line":1040},68,[243,1042,292],{"emptyLinePlaceholder":291},[243,1044,1046],{"class":245,"line":1045},69,[243,1047,1048],{},"    public function buildMinimalViableProduct(): void\n",[243,1050,1052],{"class":245,"line":1051},70,[243,1053,799],{},[243,1055,1057],{"class":245,"line":1056},71,[243,1058,1059],{},"        $this->builder->producePartA();\n",[243,1061,1063],{"class":245,"line":1062},72,[243,1064,333],{},[243,1066,1068],{"class":245,"line":1067},73,[243,1069,292],{"emptyLinePlaceholder":291},[243,1071,1073],{"class":245,"line":1072},74,[243,1074,1075],{},"    public function buildFullFeaturedProduct(): void\n",[243,1077,1079],{"class":245,"line":1078},75,[243,1080,799],{},[243,1082,1084],{"class":245,"line":1083},76,[243,1085,1059],{},[243,1087,1089],{"class":245,"line":1088},77,[243,1090,1091],{},"        $this->builder->producePartB();\n",[243,1093,1095],{"class":245,"line":1094},78,[243,1096,1097],{},"        $this->builder->producePartC();\n",[243,1099,1101],{"class":245,"line":1100},79,[243,1102,333],{},[243,1104,1106],{"class":245,"line":1105},80,[243,1107,285],{},[243,1109,1111],{"class":245,"line":1110},81,[243,1112,292],{"emptyLinePlaceholder":291},[243,1114,1116],{"class":245,"line":1115},82,[243,1117,1118],{},"function clientCode(Director $director)\n",[243,1120,1122],{"class":245,"line":1121},83,[243,1123,748],{},[243,1125,1127],{"class":245,"line":1126},84,[243,1128,1129],{},"    $builder = new ConcreteBuilder1();\n",[243,1131,1133],{"class":245,"line":1132},85,[243,1134,1135],{},"    $director->setBuilder($builder);\n",[243,1137,1139],{"class":245,"line":1138},86,[243,1140,292],{"emptyLinePlaceholder":291},[243,1142,1144],{"class":245,"line":1143},87,[243,1145,1146],{},"    echo \"Standart Başlangıç Ürünü:\\n\";\n",[243,1148,1150],{"class":245,"line":1149},88,[243,1151,1152],{},"    $director->buildMinimalViableProduct();\n",[243,1154,1156],{"class":245,"line":1155},89,[243,1157,1158],{},"    $builder->getProduct()->listParts();\n",[243,1160,1162],{"class":245,"line":1161},90,[243,1163,292],{"emptyLinePlaceholder":291},[243,1165,1167],{"class":245,"line":1166},91,[243,1168,1169],{},"    echo \"Standart Tam Donanımlı Ürün:\\n\";\n",[243,1171,1173],{"class":245,"line":1172},92,[243,1174,1175],{},"    $director->buildFullFeaturedProduct();\n",[243,1177,1179],{"class":245,"line":1178},93,[243,1180,1158],{},[243,1182,1184],{"class":245,"line":1183},94,[243,1185,292],{"emptyLinePlaceholder":291},[243,1187,1189],{"class":245,"line":1188},95,[243,1190,1191],{},"    echo \"Özel Tasarım Ürün (Director Olmadan):\\n\";\n",[243,1193,1195],{"class":245,"line":1194},96,[243,1196,1197],{},"    $builder->producePartA();\n",[243,1199,1201],{"class":245,"line":1200},97,[243,1202,1203],{},"    $builder->producePartC();\n",[243,1205,1207],{"class":245,"line":1206},98,[243,1208,1158],{},[243,1210,1212],{"class":245,"line":1211},99,[243,1213,285],{},[243,1215,1217],{"class":245,"line":1216},100,[243,1218,292],{"emptyLinePlaceholder":291},[243,1220,1222],{"class":245,"line":1221},101,[243,1223,1224],{},"$director = new Director();\n",[243,1226,1228],{"class":245,"line":1227},102,[243,1229,1230],{},"clientCode($director);\n",[712,1232,1234],{"id":1233},"örnek-python-kodu","Örnek Python Kodu",[234,1236,1240],{"className":1237,"code":1238,"language":1239,"meta":239,"style":239},"language-python shiki shiki-themes github-light github-dark","from __future__ import annotations\nfrom abc import ABC, abstractmethod\nfrom typing import Any, List\n\nclass Builder(ABC):\n    @property\n    @abstractmethod\n    def product(self) -> None:\n        pass\n\n    @abstractmethod\n    def produce_part_a(self) -> None:\n        pass\n\n    @abstractmethod\n    def produce_part_b(self) -> None:\n        pass\n\n    @abstractmethod\n    def produce_part_c(self) -> None:\n        pass\n\n\nclass ConcreteBuilder1(Builder):\n    def __init__(self) -> None:\n        self.reset()\n\n    def reset(self) -> None:\n        self._product = Product1()\n\n    @property\n    def product(self) -> Product1:\n        product = self._product\n        self.reset()\n        return product\n\n    def produce_part_a(self) -> None:\n        self._product.add(\"PartA1\")\n\n    def produce_part_b(self) -> None:\n        self._product.add(\"PartB1\")\n\n    def produce_part_c(self) -> None:\n        self._product.add(\"PartC1\")\n\n\nclass Product1():\n    def __init__(self) -> None:\n        self.parts: List[Any] = []\n\n    def add(self, part: Any) -> None:\n        self.parts.append(part)\n\n    def list_parts(self) -> None:\n        print(f\"Ürün parçaları: {', '.join(self.parts)}\", end=\"\")\n\n\nclass Director:\n    def __init__(self) -> None:\n        self._builder = None\n\n    @property\n    def builder(self) -> Builder:\n        return self._builder\n\n    @builder.setter\n    def builder(self, builder: Builder) -> None:\n        self._builder = builder\n\n    def build_minimal_viable_product(self) -> None:\n        self.builder.produce_part_a()\n\n    def build_full_featured_product(self) -> None:\n        self.builder.produce_part_a()\n        self.builder.produce_part_b()\n        self.builder.produce_part_c()\n\n\nif __name__ == \"__main__\":\n    director = Director()\n    builder = ConcreteBuilder1()\n    director.builder = builder\n\n    print(\"Standart Başlangıç Ürünü: \")\n    director.build_minimal_viable_product()\n    builder.product.list_parts()\n\n    print(\"\\n\")\n\n    print(\"Standart Tam Donanımlı Ürün: \")\n    director.build_full_featured_product()\n    builder.product.list_parts()\n\n    print(\"\\n\")\n\n    print(\"Özel Tasarım Ürün (Director Olmadan): \")\n    builder.produce_part_a()\n    builder.produce_part_b()\n    builder.product.list_parts()\n","python",[63,1241,1242,1247,1252,1257,1261,1266,1271,1276,1281,1286,1290,1294,1299,1303,1307,1311,1316,1320,1324,1328,1333,1337,1341,1345,1350,1355,1360,1364,1369,1374,1378,1382,1387,1392,1396,1401,1405,1409,1414,1418,1422,1427,1431,1435,1440,1444,1448,1453,1457,1462,1466,1471,1476,1480,1485,1490,1494,1498,1503,1507,1512,1516,1520,1525,1530,1534,1539,1544,1549,1553,1558,1563,1567,1572,1576,1581,1586,1590,1594,1599,1604,1609,1614,1618,1623,1628,1633,1637,1642,1646,1651,1656,1660,1664,1668,1672,1677,1682,1687],{"__ignoreMap":239},[243,1243,1244],{"class":245,"line":246},[243,1245,1246],{},"from __future__ import annotations\n",[243,1248,1249],{"class":245,"line":252},[243,1250,1251],{},"from abc import ABC, abstractmethod\n",[243,1253,1254],{"class":245,"line":258},[243,1255,1256],{},"from typing import Any, List\n",[243,1258,1259],{"class":245,"line":264},[243,1260,292],{"emptyLinePlaceholder":291},[243,1262,1263],{"class":245,"line":270},[243,1264,1265],{},"class Builder(ABC):\n",[243,1267,1268],{"class":245,"line":276},[243,1269,1270],{},"    @property\n",[243,1272,1273],{"class":245,"line":282},[243,1274,1275],{},"    @abstractmethod\n",[243,1277,1278],{"class":245,"line":288},[243,1279,1280],{},"    def product(self) -> None:\n",[243,1282,1283],{"class":245,"line":295},[243,1284,1285],{},"        pass\n",[243,1287,1288],{"class":245,"line":301},[243,1289,292],{"emptyLinePlaceholder":291},[243,1291,1292],{"class":245,"line":307},[243,1293,1275],{},[243,1295,1296],{"class":245,"line":313},[243,1297,1298],{},"    def produce_part_a(self) -> None:\n",[243,1300,1301],{"class":245,"line":318},[243,1302,1285],{},[243,1304,1305],{"class":245,"line":324},[243,1306,292],{"emptyLinePlaceholder":291},[243,1308,1309],{"class":245,"line":330},[243,1310,1275],{},[243,1312,1313],{"class":245,"line":336},[243,1314,1315],{},"    def produce_part_b(self) -> None:\n",[243,1317,1318],{"class":245,"line":341},[243,1319,1285],{},[243,1321,1322],{"class":245,"line":347},[243,1323,292],{"emptyLinePlaceholder":291},[243,1325,1326],{"class":245,"line":353},[243,1327,1275],{},[243,1329,1330],{"class":245,"line":358},[243,1331,1332],{},"    def produce_part_c(self) -> None:\n",[243,1334,1335],{"class":245,"line":363},[243,1336,1285],{},[243,1338,1339],{"class":245,"line":369},[243,1340,292],{"emptyLinePlaceholder":291},[243,1342,1343],{"class":245,"line":375},[243,1344,292],{"emptyLinePlaceholder":291},[243,1346,1347],{"class":245,"line":381},[243,1348,1349],{},"class ConcreteBuilder1(Builder):\n",[243,1351,1352],{"class":245,"line":386},[243,1353,1354],{},"    def __init__(self) -> None:\n",[243,1356,1357],{"class":245,"line":391},[243,1358,1359],{},"        self.reset()\n",[243,1361,1362],{"class":245,"line":397},[243,1363,292],{"emptyLinePlaceholder":291},[243,1365,1366],{"class":245,"line":403},[243,1367,1368],{},"    def reset(self) -> None:\n",[243,1370,1371],{"class":245,"line":409},[243,1372,1373],{},"        self._product = Product1()\n",[243,1375,1376],{"class":245,"line":414},[243,1377,292],{"emptyLinePlaceholder":291},[243,1379,1380],{"class":245,"line":419},[243,1381,1270],{},[243,1383,1384],{"class":245,"line":425},[243,1385,1386],{},"    def product(self) -> Product1:\n",[243,1388,1389],{"class":245,"line":431},[243,1390,1391],{},"        product = self._product\n",[243,1393,1394],{"class":245,"line":436},[243,1395,1359],{},[243,1397,1398],{"class":245,"line":441},[243,1399,1400],{},"        return product\n",[243,1402,1403],{"class":245,"line":446},[243,1404,292],{"emptyLinePlaceholder":291},[243,1406,1407],{"class":245,"line":452},[243,1408,1298],{},[243,1410,1411],{"class":245,"line":458},[243,1412,1413],{},"        self._product.add(\"PartA1\")\n",[243,1415,1416],{"class":245,"line":464},[243,1417,292],{"emptyLinePlaceholder":291},[243,1419,1420],{"class":245,"line":470},[243,1421,1315],{},[243,1423,1424],{"class":245,"line":476},[243,1425,1426],{},"        self._product.add(\"PartB1\")\n",[243,1428,1429],{"class":245,"line":482},[243,1430,292],{"emptyLinePlaceholder":291},[243,1432,1433],{"class":245,"line":488},[243,1434,1332],{},[243,1436,1437],{"class":245,"line":493},[243,1438,1439],{},"        self._product.add(\"PartC1\")\n",[243,1441,1442],{"class":245,"line":499},[243,1443,292],{"emptyLinePlaceholder":291},[243,1445,1446],{"class":245,"line":504},[243,1447,292],{"emptyLinePlaceholder":291},[243,1449,1450],{"class":245,"line":510},[243,1451,1452],{},"class Product1():\n",[243,1454,1455],{"class":245,"line":515},[243,1456,1354],{},[243,1458,1459],{"class":245,"line":937},[243,1460,1461],{},"        self.parts: List[Any] = []\n",[243,1463,1464],{"class":245,"line":942},[243,1465,292],{"emptyLinePlaceholder":291},[243,1467,1468],{"class":245,"line":948},[243,1469,1470],{},"    def add(self, part: Any) -> None:\n",[243,1472,1473],{"class":245,"line":953},[243,1474,1475],{},"        self.parts.append(part)\n",[243,1477,1478],{"class":245,"line":959},[243,1479,292],{"emptyLinePlaceholder":291},[243,1481,1482],{"class":245,"line":964},[243,1483,1484],{},"    def list_parts(self) -> None:\n",[243,1486,1487],{"class":245,"line":970},[243,1488,1489],{},"        print(f\"Ürün parçaları: {', '.join(self.parts)}\", end=\"\")\n",[243,1491,1492],{"class":245,"line":975},[243,1493,292],{"emptyLinePlaceholder":291},[243,1495,1496],{"class":245,"line":981},[243,1497,292],{"emptyLinePlaceholder":291},[243,1499,1500],{"class":245,"line":986},[243,1501,1502],{},"class Director:\n",[243,1504,1505],{"class":245,"line":991},[243,1506,1354],{},[243,1508,1509],{"class":245,"line":996},[243,1510,1511],{},"        self._builder = None\n",[243,1513,1514],{"class":245,"line":1002},[243,1515,292],{"emptyLinePlaceholder":291},[243,1517,1518],{"class":245,"line":1007},[243,1519,1270],{},[243,1521,1522],{"class":245,"line":1013},[243,1523,1524],{},"    def builder(self) -> Builder:\n",[243,1526,1527],{"class":245,"line":1018},[243,1528,1529],{},"        return self._builder\n",[243,1531,1532],{"class":245,"line":1024},[243,1533,292],{"emptyLinePlaceholder":291},[243,1535,1536],{"class":245,"line":1029},[243,1537,1538],{},"    @builder.setter\n",[243,1540,1541],{"class":245,"line":1035},[243,1542,1543],{},"    def builder(self, builder: Builder) -> None:\n",[243,1545,1546],{"class":245,"line":1040},[243,1547,1548],{},"        self._builder = builder\n",[243,1550,1551],{"class":245,"line":1045},[243,1552,292],{"emptyLinePlaceholder":291},[243,1554,1555],{"class":245,"line":1051},[243,1556,1557],{},"    def build_minimal_viable_product(self) -> None:\n",[243,1559,1560],{"class":245,"line":1056},[243,1561,1562],{},"        self.builder.produce_part_a()\n",[243,1564,1565],{"class":245,"line":1062},[243,1566,292],{"emptyLinePlaceholder":291},[243,1568,1569],{"class":245,"line":1067},[243,1570,1571],{},"    def build_full_featured_product(self) -> None:\n",[243,1573,1574],{"class":245,"line":1072},[243,1575,1562],{},[243,1577,1578],{"class":245,"line":1078},[243,1579,1580],{},"        self.builder.produce_part_b()\n",[243,1582,1583],{"class":245,"line":1083},[243,1584,1585],{},"        self.builder.produce_part_c()\n",[243,1587,1588],{"class":245,"line":1088},[243,1589,292],{"emptyLinePlaceholder":291},[243,1591,1592],{"class":245,"line":1094},[243,1593,292],{"emptyLinePlaceholder":291},[243,1595,1596],{"class":245,"line":1100},[243,1597,1598],{},"if __name__ == \"__main__\":\n",[243,1600,1601],{"class":245,"line":1105},[243,1602,1603],{},"    director = Director()\n",[243,1605,1606],{"class":245,"line":1110},[243,1607,1608],{},"    builder = ConcreteBuilder1()\n",[243,1610,1611],{"class":245,"line":1115},[243,1612,1613],{},"    director.builder = builder\n",[243,1615,1616],{"class":245,"line":1121},[243,1617,292],{"emptyLinePlaceholder":291},[243,1619,1620],{"class":245,"line":1126},[243,1621,1622],{},"    print(\"Standart Başlangıç Ürünü: \")\n",[243,1624,1625],{"class":245,"line":1132},[243,1626,1627],{},"    director.build_minimal_viable_product()\n",[243,1629,1630],{"class":245,"line":1138},[243,1631,1632],{},"    builder.product.list_parts()\n",[243,1634,1635],{"class":245,"line":1143},[243,1636,292],{"emptyLinePlaceholder":291},[243,1638,1639],{"class":245,"line":1149},[243,1640,1641],{},"    print(\"\\n\")\n",[243,1643,1644],{"class":245,"line":1155},[243,1645,292],{"emptyLinePlaceholder":291},[243,1647,1648],{"class":245,"line":1161},[243,1649,1650],{},"    print(\"Standart Tam Donanımlı Ürün: \")\n",[243,1652,1653],{"class":245,"line":1166},[243,1654,1655],{},"    director.build_full_featured_product()\n",[243,1657,1658],{"class":245,"line":1172},[243,1659,1632],{},[243,1661,1662],{"class":245,"line":1178},[243,1663,292],{"emptyLinePlaceholder":291},[243,1665,1666],{"class":245,"line":1183},[243,1667,1641],{},[243,1669,1670],{"class":245,"line":1188},[243,1671,292],{"emptyLinePlaceholder":291},[243,1673,1674],{"class":245,"line":1194},[243,1675,1676],{},"    print(\"Özel Tasarım Ürün (Director Olmadan): \")\n",[243,1678,1679],{"class":245,"line":1200},[243,1680,1681],{},"    builder.produce_part_a()\n",[243,1683,1684],{"class":245,"line":1206},[243,1685,1686],{},"    builder.produce_part_b()\n",[243,1688,1689],{"class":245,"line":1211},[243,1690,1632],{},[91,1692],{},[94,1694,1696],{"id":1695},"sıkça-sorulan-sorular-faq","Sıkça Sorulan Sorular (FAQ)",[712,1698,1700],{"id":1699},"director-sınıfı-kullanmak-zorunlu-mudur","Director sınıfı kullanmak zorunlu mudur?",[11,1702,1703],{},"Halbuki hayır. İstemci kod builder metotlarını doğrudan kendisi sırayla çağırabilir. Director sınıfı, kodda aynı kurulum adımlarının tekrar tekrar yazılmasını engellemek ve yaygın kurulum senaryolarını tek merkezde toplamak için kullanılan opsiyonel bir yapıdır.",[712,1705,1707],{"id":1706},"akıcı-arayüz-fluent-interface-method-chaining-ile-builder-deseni-arasındaki-ilişki-nedir","Akıcı Arayüz (Fluent Interface \u002F Method Chaining) ile Builder deseni arasındaki ilişki nedir?",[11,1709,1710,1711,1714,1715,1718,1719,1722],{},"Akıcı arayüz, builder adımlarının ",[63,1712,1713],{},"return $this;"," (veya Python'da ",[63,1716,1717],{},"return self",") döndürmesiyle sağlanır. Bu yaklaşım, adımları zincirleme şekilde (",[63,1720,1721],{},"$builder->addA()->addB()->build()",") çağırarak kodun okunabilirliğini ve yazım hızını ciddi derecede artırır.",[712,1724,1726],{"id":1725},"builder-deseni-hangi-durumlarda-aşırı-mühendislik-over-engineering-sayılır","Builder deseni hangi durumlarda aşırı mühendislik (over-engineering) sayılır?",[11,1728,1729],{},"Nesneniz basitse, en fazla 2-3 parametre alıyorsa ve gelecekte genişleme ihtimali yoksa Builder deseni uygulamak gereksiz kod kalabalığı yaratacaktır. Bu durumlarda standart bir yapıcı metot (constructor) veya basit bir fabrika (factory) işinizi görecektir.",[91,1731],{},[94,1733,1735],{"id":1734},"diğer-tasarım-kalıplarıdesign-patterns","Diğer Tasarım Kalıpları\u002FDesign Patterns",[11,1737,1738],{},[43,1739,1740],{},"Oluşumsal Kalıplar (Creational Patterns)",[11,1742,1743,1746,1747,1746,1750,1746,1753,1746,1757],{},[15,1744,592],{"href":1745},"\u002Ftr\u002Ftasarim-kaliplari-design-patterns-factory-method-nedir",",\n",[15,1748,589],{"href":1749},"\u002Ftr\u002Ftasarim-kaliplari-design-patterns-abstract-factory-nedir",[15,1751,65],{"href":1752},"\u002Ftr\u002Fbuilder-tasarim-deseni-nedir",[15,1754,1756],{"href":1755},"\u002Ftr\u002Fprototype-tasarim-deseni-nedir","Prototype",[15,1758,703],{"href":1759},"\u002Ftr\u002Fsingleton-tasarim-deseni-nedir",[11,1761,1762],{},[43,1763,1764],{},"Yapısal Kalıplar (Structural Patterns)",[11,1766,1767,1746,1771,1746,1775,1746,1779,1746,1783,1746,1787,1746,1791],{},[15,1768,1770],{"href":1769},"\u002Ftr\u002Fadapter-tasarim-deseni-nedir","Adapter",[15,1772,1774],{"href":1773},"\u002Ftr\u002Fbridge-tasarim-deseni-nedir","Bridge",[15,1776,1778],{"href":1777},"\u002Ftr\u002Fcomposite-tasarim-deseni-nedir","Composite",[15,1780,1782],{"href":1781},"\u002Ftr\u002Fdecorator-tasarim-deseni-nedir","Decorator",[15,1784,1786],{"href":1785},"\u002Ftr\u002Ffacade-tasarim-deseni-nedir","Facade",[15,1788,1790],{"href":1789},"\u002Ftr\u002Fflyweight-tasarim-deseni-nedir","Flyweight",[15,1792,1794],{"href":1793},"\u002Ftr\u002Fproxy-tasarim-deseni-nedir","Proxy",[11,1796,1797],{},[43,1798,1799],{},"Davranışsal Kalıplar (Behavioral Patterns)",[11,1801,1802,1746,1806,1746,1810,1746,1814,1746,1818,1746,1822,1746,1826,1746,1830,1746,1834,1746,1838],{},[15,1803,1805],{"href":1804},"\u002Ftr\u002Fchain-of-responsibility-deseni-nedir","Chain of Responsibility",[15,1807,1809],{"href":1808},"\u002Ftr\u002Fcommand-tasarim-deseni-nedir","Command",[15,1811,1813],{"href":1812},"\u002Ftr\u002Fiterator-tasarim-deseni-nedir","Iterator",[15,1815,1817],{"href":1816},"\u002Ftr\u002Fmediator-tasarim-deseni-nedir","Mediator",[15,1819,1821],{"href":1820},"\u002Ftr\u002Fmemento-tasarim-deseni-nedir","Memento",[15,1823,1825],{"href":1824},"\u002Ftr\u002Fobserver-tasarim-deseni-nedir","Observer",[15,1827,1829],{"href":1828},"\u002Ftr\u002Fstate-tasarim-deseni-nedir","State",[15,1831,1833],{"href":1832},"\u002Ftr\u002Fstrategy-tasarim-deseni-nedir","Strategy",[15,1835,1837],{"href":1836},"\u002Ftr\u002Ftemplate-method-tasarim-deseni-nedir","Template Method",[15,1839,1841],{"href":1840},"\u002Ftr\u002Fvisitor-tasarim-deseni-nedir","Visitor",[1843,1844,1845],"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":239,"searchDepth":252,"depth":252,"links":1847},[1848,1849,1850,1851,1852,1853,1854,1855,1856,1860,1865],{"id":96,"depth":252,"text":97},{"id":107,"depth":252,"text":108},{"id":167,"depth":252,"text":168},{"id":207,"depth":252,"text":208},{"id":228,"depth":252,"text":229},{"id":569,"depth":252,"text":570},{"id":648,"depth":252,"text":649},{"id":674,"depth":252,"text":675},{"id":709,"depth":252,"text":710,"children":1857},[1858,1859],{"id":714,"depth":258,"text":715},{"id":1233,"depth":258,"text":1234},{"id":1695,"depth":252,"text":1696,"children":1861},[1862,1863,1864],{"id":1699,"depth":258,"text":1700},{"id":1706,"depth":258,"text":1707},{"id":1725,"depth":258,"text":1726},{"id":1734,"depth":252,"text":1735},[1867],"technical",null,"2021-08-03","Builder (Kurucu) tasarım kalıbını, Teleskobik Yapıcı problemini, SQL Query Builder uygulamalarını ve PHP\u002FPython örneklerini öğrenin.",false,"md","\u002Fimages\u002Fposts\u002F2021\u002F08\u002Fbuilder-en.avif",{},{"title":6,"description":1870},"builder-tasarim-deseni-nedir","tr\u002Fbuilder-tasarim-deseni-nedir",[1879,1880,1881,1882],"design-patterns","ipucu","tasarim-desenleri","tasarim-kaliplari","ziw4lSxuKsTT37MIBuaHuSSLUKzRy-Ek9igmI47ekZs",{"prev":1885,"next":1887,"others":1890,"lucky":2005,"readingTime":282},{"path":1755,"title":1886},"Prototype Tasarım Deseni Nedir?",{"path":1888,"title":1889},"\u002Ftr\u002Fgo-ile-websockets-websocket-upgrader-nedir","Go ile WebSockets: Upgrader Nedir?",[1891,1894,1897,1900,1902,1905,1908,1911,1914,1916,1919,1921,1924,1927,1930,1933,1936,1939,1942,1945,1948,1951,1954,1956,1959,1962,1964,1967,1970,1973,1976,1979,1982,1985,1987,1990,1993,1996,1999,2002],{"path":1892,"title":1893},"\u002Ftr\u002Fmerhaba-gluster","Merhaba Gluster: Dağıtık Dosya Sistemi Nedir?",{"path":1895,"title":1896},"\u002Ftr\u002Fubuntu-20-04-composer-kurulumu","Ubuntu 20.04 - Composer Kurulumu",{"path":1898,"title":1899},"\u002Ftr\u002Fdocker-ile-redis-kurulumu","Docker ile Redis Kurulumu",{"path":1836,"title":1901},"Template Method Tasarım Deseni Nedir?",{"path":1903,"title":1904},"\u002Ftr\u002Frestful-api-bilesenleri","RESTful API Bileşenleri",{"path":1906,"title":1907},"\u002Ftr\u002Faws-ec2-uzerinde-docker-ve-full-stack-web-performansi","AWS EC2 Üzerinde Docker ve Full Stack Web Performansı",{"path":1909,"title":1910},"\u002Ftr\u002Fvite-nedir","Vite Nedir? Modern Web Geliştirme ve Paketleme Aracı",{"path":1912,"title":1913},"\u002Ftr\u002Frest-api-guvenligi-nasil-saglanir","REST Api Güvenliği Nasıl Sağlanır?",{"path":1785,"title":1915},"Facade Tasarım Deseni Nedir?",{"path":1917,"title":1918},"\u002Ftr\u002Fwsl-2-kurulumu-6-kolay-adim","WSL 2 Kurulumu - 6 kolay adım",{"path":1749,"title":1920},"Abstract Factory Tasarım Deseni Nedir?",{"path":1922,"title":1923},"\u002Ftr\u002Fgo-veri-tipleri-struct","Go Veri Tipleri: Struct",{"path":1925,"title":1926},"\u002Ftr\u002Fearly-return-erken-donus-nedir","Early Return \u002F Erken Dönüş nedir?",{"path":1928,"title":1929},"\u002Ftr\u002Fyeni-tema-honeywind","Yeni WordPress Temam Honeywind: Tailwind CSS ve Minimalizm",{"path":1931,"title":1932},"\u002Ftr\u002Fdocker-ile-mariadb-kurulumu","Docker ile MariaDB Kurulumu",{"path":1934,"title":1935},"\u002Ftr\u002Frabbitmq-nedir","RabbitMQ Nedir?",{"path":1937,"title":1938},"\u002Ftr\u002Fcodeserver-nedir-codeserver-nasil-kurulur","Code-Server Nedir? Bulutta VS Code Geliştirme Ortamı Kurulumu",{"path":1940,"title":1941},"\u002Ftr\u002Ffactory-method-ve-abstract-factory-farki-nedir","Factory Method ve Abstract Factory Farkı Nedir?",{"path":1943,"title":1944},"\u002Ftr\u002Fes13-nedir-ecmascript-2022-nedir","ES13 nedir? ECMAScript 2022 nedir?",{"path":1946,"title":1947},"\u002Ftr\u002Fphalcon-frameworkun-gelecegi","Phalcon Framework'ün Geleceği: Bir Devrin Sonu",{"path":1949,"title":1950},"\u002Ftr\u002Flinuxda-golang-kurulumu","Linux'ta Golang Kurulumu",{"path":1952,"title":1953},"\u002Ftr\u002Fes8-nedir-ecmascript-2017-nedir","ES8 Nedir? ECMAScript 2017 Nedir?",{"path":1789,"title":1955},"Flyweight Tasarım Deseni Nedir?",{"path":1957,"title":1958},"\u002Ftr\u002Fheadless-wordpress-hakkinda-her-sey","Headless WordPress Hakkında Her Şey",{"path":1960,"title":1961},"\u002Ftr\u002Fgoda-iota-nedir-iota-ne-zaman-ve-nerede-kullanilir","Go'da iota Nedir? iota Ne Zaman ve Nerede Kullanılır?",{"path":1804,"title":1963},"Chain of Responsibility Deseni Nedir?",{"path":1965,"title":1966},"\u002Ftr\u002Fes7-nedir-ecmascript-2016-nedir","ES7 Nedir? ECMAScript 2016 Nedir?",{"path":1968,"title":1969},"\u002Ftr\u002Fgo-slice-veri-tipi","Go Veri Tipleri: Slice",{"path":1971,"title":1972},"\u002Ftr\u002Fes14-nedir-ecmascript-2023-nedir","ES14 nedir? ECMAScript 2023 nedir?",{"path":1974,"title":1975},"\u002Ftr\u002Fdocker-swarm-nedir","Docker Swarm Nedir?",{"path":1977,"title":1978},"\u002Ftr\u002Fes6-nedir-ecmascript-2015-nedir","ES6 Nedir? ECMAScript 2015 Nedir?",{"path":1980,"title":1981},"\u002Ftr\u002Fvue-3-hakkinda-bilmeniz-gerekenler-yenilikler","Vue 3 Hakkında Bilmeniz Gerekenler ve Yenilikler",{"path":1983,"title":1984},"\u002Ftr\u002Ftemiz-moduler-ve-yeniden-kullanilabilir-php-kodu-yazma-rehberi","PHP'de Temiz, Modüler ve Yeniden Kullanılabilir Kod Yazma Rehberi",{"path":1777,"title":1986},"Composite Tasarım Deseni Nedir?",{"path":1988,"title":1989},"\u002Ftr\u002Ffull-stack-proje-agaci","Full-Stack Proje Yol Haritası ve İçindekiler",{"path":1991,"title":1992},"\u002Ftr\u002Fubuntu-20-04-uzerinde-cyberpanel-kurulumu","Ubuntu 20.04 üzerinde CyberPanel kurulumu",{"path":1994,"title":1995},"\u002Ftr\u002Frest-api-hata-yonetimi","REST Api Hata Yönetimi",{"path":1997,"title":1998},"\u002Ftr\u002Fes12-nedir-ecmascript-2021-nedir","ES12 Nedir? ECMAScript 2021 Nedir?",{"path":2000,"title":2001},"\u002Ftr\u002Fdocker-ile-litespeed-enterprise-kurulumu","Docker ile LiteSpeed Enterprise Kurulumu",{"path":2003,"title":2004},"\u002Ftr\u002Fnext-js-on-bellegi-nasil-yenilenir-on-demand-cache-regeneration","Next.js Önbelleği Nasıl Yenilenir? \"On-Demand Cache Regeneration\"",{"path":1773,"title":2006},"Bridge Tasarım Deseni Nedir?",[2008,2011,2014,2016],{"path":1769,"title":2009,"date":2010},"Adapter Tasarım Deseni Nedir?","2021-08-21",{"path":17,"title":2012,"date":2013},"Design Patterns \u002F Tasarım Desenleri nedir?","2021-07-24",{"path":1749,"title":1920,"date":2015},"2021-07-27",{"path":1745,"title":2017,"date":2013},"Factory Method Tasarım Deseni Nedir?",[2019,2022,2026],{"path":1781,"title":2020,"date":2021},"Decorator Tasarım Deseni Nedir?","2021-09-12",{"path":2023,"title":2024,"date":2025},"\u002Ftr\u002Fecmascript-nedir-ecmascript-ne-degildir-bilinmesi-gerekenler","ECMAScript Nedir? Bilinmesi Gerekenler...","2021-10-20",{"path":2027,"title":2028,"date":2029},"\u002Ftr\u002Fes11-nedir-ecmascript-2020-nedir","ES11 Nedir? ECMAScript 2020 Nedir?","2021-10-19",1782142077281]