{"id":2183,"date":"2019-09-16T23:45:51","date_gmt":"2019-09-16T20:45:51","guid":{"rendered":"http:\/\/demensdeum.com\/blog\/?p=2183"},"modified":"2024-12-16T22:32:34","modified_gmt":"2024-12-16T19:32:34","slug":"composite-pattern","status":"publish","type":"post","link":"https:\/\/demensdeum.com\/blog\/de\/2019\/09\/16\/composite-pattern\/","title":{"rendered":"Musterverbund"},"content":{"rendered":"<p>Das Composite-Muster bezieht sich auf strukturelle Designmuster; in inl\u00e4ndischen Quellen ist es als \u201eCompositor\u201c bekannt.<br \/>Nehmen wir an, wir entwickeln eine Anwendung &#8211; Fotoalbum. Der Benutzer kann Ordner erstellen, dort Fotos hinzuf\u00fcgen und andere Manipulationen durchf\u00fchren. Sie ben\u00f6tigen auf jeden Fall die M\u00f6glichkeit, die Anzahl der Dateien in Ordnern und die Gesamtzahl aller Dateien und Ordner anzuzeigen.<br \/>Es ist offensichtlich, dass Sie einen Baum verwenden m\u00fcssen, aber wie implementiert man eine Baumarchitektur mit einer einfachen und praktischen Schnittstelle? Das Composite-Muster kommt zur Rettung.<\/p>\n<p><a href=\"https:\/\/www.flickr.com\/photos\/8586177@N03\/5075169756\" target=\"_blank\" rel=\"noopener noreferrer\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-2185\" src=\"https:\/\/demensdeum.com\/blog\/wp-content\/uploads\/2019\/09\/tree-1.jpg\" alt=\"\" width=\"400\" height=\"423\" \/><\/a><\/p>\n<div class=\"attribution-info\">\n<p><a class=\"owner-name truncate\" title=\"Gehe zu Sheila im Fotostream von Moonducks\" href=\"https:\/\/www.flickr.com\/photos\/aspis7\/\" target=\"_blank\" rel=\"noopener noreferrer\" data-track=\"attributionNameClick\">Sheila in Moonducks<\/a><\/p>\n<div id=\"yui_3_16_0_1_1568665128454_889\" class=\"view follow-view clear-float photo-attribution\">Wir implementieren die Component-Schnittstelle mit der von uns ben\u00f6tigten dataCount()-Methode, \u00fcber die wir die Anzahl der Dateien\/Verzeichnisse zur\u00fcckgeben. Erstellen wir eine Directory-Klasse mit einer Schnittstelle, die es Ihnen erm\u00f6glicht, Instanzen von Klassen hinzuzuf\u00fcgen\/zu entfernen, die die Component-Schnittstelle gem\u00e4\u00df dem Muster implementieren. Dies ist Composite. Wir erstellen au\u00dferdem eine File-Klasse, in der wir Bytes mit einer Fotokarte speichern, von Component erben und \u00fcber dataCount 1 zur\u00fcckgeben, was bedeutet, dass es nur ein Foto gibt!<\/div>\n<div>Als n\u00e4chstes implementieren wir im Verzeichnis die dataCount()-Methode &#8211; indem Sie alle im Array von Komponenten liegenden Elemente durchgehen und alle ihre dataCount&#8217;s addieren.<\/div>\n<div>Alles ist bereit!<\/div>\n<div>Unten ist ein Beispiel in Go:<\/div>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-numbers lang-unknown\" data-lang=\"unknown\"><code>package main\n\nimport \"fmt\"\n\ntype component interface {\n\ndataCount() int\n\n}\n\ntype file struct {\n\n}\n\ntype directory struct {\n\nc []component\n\n}\n\nfunc (f file) dataCount() int {\n\nreturn 1\n\n}\n\nfunc (d directory) dataCount() int {\n\nvar outputDataCount int = 0\n\nfor _, v := range d.c {\noutputDataCount += v.dataCount()\n}\n\nreturn outputDataCount\n\n}\n\nfunc (d *directory) addComponent(c component) {\n\nd.c = append(d.c, c)\n\n}\n\nfunc main() {\n\nvar f file\nvar rd directory\nrd.addComponent(f)\nrd.addComponent(f)\nrd.addComponent(f)\nrd.addComponent(f)\n\nfmt.Println(rd.dataCount())\n\nvar sd directory\nsd.addComponent(f)\n\nrd.addComponent(sd)\nrd.addComponent(sd)\nrd.addComponent(sd)\n\nfmt.Println(sd.dataCount())\nfmt.Println(rd.dataCount())\n\n}\n<\/code><\/pre>\n<\/div>\n<h3>Quellen<\/h3>\n<p><a href=\"https:\/\/refactoring.guru\/ru\/design-patterns\/composite\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/refactoring.guru\/ru\/design-patterns\/ zusammengesetzt<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Das Composite-Muster bezieht sich auf strukturelle Designmuster; in inl\u00e4ndischen Quellen ist es als \u201eCompositor\u201c bekannt.Nehmen wir an, wir entwickeln eine Anwendung &#8211; Fotoalbum. Der Benutzer kann Ordner erstellen, dort Fotos hinzuf\u00fcgen und andere Manipulationen durchf\u00fchren. Sie ben\u00f6tigen auf jeden Fall die M\u00f6glichkeit, die Anzahl der Dateien in Ordnern und die Gesamtzahl aller Dateien und Ordner<a class=\"more-link\" href=\"https:\/\/demensdeum.com\/blog\/de\/2019\/09\/16\/composite-pattern\/\">Continue reading <span class=\"screen-reader-text\">&#8220;Musterverbund&#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":[116,95],"class_list":["post-2183","post","type-post","status-publish","format-standard","hentry","category-techie","category-tutorials","tag-composite","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\/2183","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=2183"}],"version-history":[{"count":11,"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/posts\/2183\/revisions"}],"predecessor-version":[{"id":3944,"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/posts\/2183\/revisions\/3944"}],"wp:attachment":[{"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/media?parent=2183"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/categories?post=2183"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/tags?post=2183"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}