{"id":2197,"date":"2019-09-23T22:45:09","date_gmt":"2019-09-23T19:45:09","guid":{"rendered":"http:\/\/demensdeum.com\/blog\/?p=2197"},"modified":"2024-12-16T22:32:34","modified_gmt":"2024-12-16T19:32:34","slug":"builder-pattern","status":"publish","type":"post","link":"https:\/\/demensdeum.com\/blog\/de\/2019\/09\/23\/builder-pattern\/","title":{"rendered":"Musterersteller"},"content":{"rendered":"<p>Das Builder-Muster geh\u00f6rt zu einer Gruppe von Mustern, deren Existenz mir nicht besonders klar ist, ich stelle die offensichtliche Redundanz fest. Geh\u00f6rt zur Gruppe der generativen Designmuster. Wird verwendet, um eine einfache Schnittstelle zum Erstellen komplexer Objekte zu implementieren.<\/p>\n<h3>Anwendbarkeit<\/h3>\n<p><strong>Vereinfachung der Schnittstelle.<\/strong> Dies kann die Erstellung eines Objekts in Konstruktoren mit einer gro\u00dfen Anzahl von Argumenten erleichtern und die Lesbarkeit des Codes objektiv verbessern.<\/p>\n<p>Beispiel in C++ ohne Builder:<\/p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-numbers lang-unknown\" data-lang=\"unknown\"><code>auto weapon = new Weapon(\u201cClaws\u201d);\nmonster->weapon = weapon;\nauto health = new MonsterHealth(100);\nmonster->health = health;<\/code><\/pre>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440 \u0441\u043e \u0441\u0442\u0440\u043e\u0438\u0442\u0435\u043b\u0435\u043c \u043d\u0430 C++:<\/p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-numbers lang-unknown\" data-lang=\"unknown\"><code>                  .addWeapon(\u201cClaws\u201d)\n                  .addHealth(100)\n                  .build();<\/code><\/pre>\n<p>\u041e\u0434\u043d\u0430\u043a\u043e \u0432 \u044f\u0437\u044b\u043a\u0430\u0445 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0449\u0438\u0445 \u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b (named arguments), \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u043c\u0435\u043d\u043d\u043e \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0441\u043b\u0443\u0447\u0430\u044f \u043e\u0442\u043f\u0430\u0434\u0430\u0435\u0442.<\/p>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440 \u043d\u0430 Swift \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c named arguments:<\/p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-numbers lang-unknown\" data-lang=\"unknown\"><code>let monster = Monster(weapon: \u201cClaws\u201d, health: 100)\n<\/code><\/pre>\n<\/div>\n<p><strong>Unver\u00e4nderlichkeit.<\/strong> Mit dem Builder k\u00f6nnen Sie die Kapselung des erstellten Objekts bis zur endg\u00fcltigen Montagephase sicherstellen. Hier m\u00fcssen Sie sorgf\u00e4ltig dar\u00fcber nachdenken, ob Sie durch die Verwendung eines Musters vor der hohen Dynamik der Umgebung, in der Sie arbeiten, bewahrt werden. Vielleicht bringt die Verwendung des Musters nichts, weil im Entwicklungsteam einfach keine Kapselungskultur herrscht .<\/p>\n<p><strong>Interaktion mit Komponenten in verschiedenen Phasen der Objekterstellung.<\/strong> Mithilfe des Musters ist es au\u00dferdem m\u00f6glich, die schrittweise Erstellung eines Objekts bei der Interaktion mit anderen Komponenten des Systems sicherzustellen. H\u00f6chstwahrscheinlich ist dies sehr n\u00fctzlich (?)<\/p>\n<h3>Kritik<\/h3>\n<p>Nat\u00fcrlich m\u00fcssen Sie *sorgf\u00e4ltig* dar\u00fcber nachdenken, ob es sich lohnt, das Muster in Ihrem Projekt fl\u00e4chendeckend zu nutzen. Sprachen mit moderner Syntax und einer erweiterten IDE machen die Verwendung des Builders \u00fcberfl\u00fcssig, was die Lesbarkeit des Codes verbessert (siehe den Punkt zu benannten Argumenten)<br \/>H\u00e4tte dieses Muster 1994 verwendet werden sollen, als das GoF-Buch ver\u00f6ffentlicht wurde? H\u00f6chstwahrscheinlich ja, aber gemessen an der Open-Source-Codebasis jener Jahre nutzten ihn nur wenige Menschen.<\/p>\n<h3>Quellen<\/h3>\n<p><a href=\"https:\/\/refactoring.guru\/ru\/design-patterns\/builder\" target=\"_blank\" rel=\"noopener\">https:\/\/refactoring.guru\/ru\/design-patterns\/builder <\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Das Builder-Muster geh\u00f6rt zu einer Gruppe von Mustern, deren Existenz mir nicht besonders klar ist, ich stelle die offensichtliche Redundanz fest. Geh\u00f6rt zur Gruppe der generativen Designmuster. Wird verwendet, um eine einfache Schnittstelle zum Erstellen komplexer Objekte zu implementieren. Anwendbarkeit Vereinfachung der Schnittstelle. Dies kann die Erstellung eines Objekts in Konstruktoren mit einer gro\u00dfen Anzahl<a class=\"more-link\" href=\"https:\/\/demensdeum.com\/blog\/de\/2019\/09\/23\/builder-pattern\/\">Continue reading <span class=\"screen-reader-text\">&#8220;Musterersteller&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[61,52],"tags":[117,95],"class_list":["post-2197","post","type-post","status-publish","format-standard","hentry","category-techie","category-tutorials","tag-builder","tag-patterns","entry"],"translation":{"provider":"WPGlobus","version":"3.0.2","language":"de","enabled_languages":["en","ru","zh","de","fr","ja","pt","hi"],"languages":{"en":{"title":true,"content":true,"excerpt":false},"ru":{"title":true,"content":true,"excerpt":false},"zh":{"title":true,"content":true,"excerpt":false},"de":{"title":true,"content":true,"excerpt":false},"fr":{"title":true,"content":true,"excerpt":false},"ja":{"title":true,"content":true,"excerpt":false},"pt":{"title":true,"content":true,"excerpt":false},"hi":{"title":false,"content":false,"excerpt":false}}},"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/posts\/2197","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/comments?post=2197"}],"version-history":[{"count":11,"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/posts\/2197\/revisions"}],"predecessor-version":[{"id":3943,"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/posts\/2197\/revisions\/3943"}],"wp:attachment":[{"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/media?parent=2197"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/categories?post=2197"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/tags?post=2197"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}