{"id":1790,"date":"2019-04-13T08:34:22","date_gmt":"2019-04-13T08:34:22","guid":{"rendered":"http:\/\/demensdeum.com\/blog\/?p=1790"},"modified":"2024-12-16T22:32:38","modified_gmt":"2024-12-16T19:32:38","slug":"visitor-pattern","status":"publish","type":"post","link":"https:\/\/demensdeum.com\/blog\/de\/2019\/04\/13\/visitor-pattern\/","title":{"rendered":"Besuchermuster"},"content":{"rendered":"<p><em>In diesem Beitrag beschreibe ich ein Designmuster namens \u201eBesucher\u201c. oder \u201eBesucher\u201c<br \/><\/em>Dieses Muster geh\u00f6rt zur Gruppe der <strong>Verhaltensmuster<\/strong>.<\/p>\n<h3>Lass uns ein Problem finden<\/h3>\n<p>Dieses Muster wird haupts\u00e4chlich verwendet, um die Beschr\u00e4nkung des Einzelversands in Sprachen mit fr\u00fcher Bindung zu umgehen.<\/p>\n<p><a href=\"https:\/\/www.flickr.com\/photos\/nfg\/16506635470\/in\/photostream\/\" target=\"_blank\" rel=\"noopener noreferrer\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1798\" src=\"https:\/\/demensdeum.com\/blog\/wp-content\/uploads\/2019\/04\/kinbaku.jpg\" alt=\"\" width=\"420\" height=\"640\" \/><\/a><\/p>\n<p><a href=\"https:\/\/www.flickr.com\/photos\/nfg\/16506635470\/in\/photostream\/\" target=\"_blank\" rel=\"noopener noreferrer\">Alice X<\/a> von <a href=\"https:\/\/nfgphoto.com\" target=\"_blank\" rel=\"noopener noreferrer\">NFGPhoto<\/a> (<a href=\"https:\/\/creativecommons.org\/licenses\/by\/2.0\/\" target=\"_blank\" rel=\"noopener noreferrer\">CC-2.0<\/a>)<br \/>Lassen Sie uns eine abstrakte Klasse\/ein abstraktes Protokoll Band erstellen, eine Unterklasse von MurpleDeep erstellen und eine Besucherklasse mit zwei Methoden erstellen &#8211; Eine f\u00fcr die Ausgabe aller Nachkommen von Band an die Konsole, die zweite f\u00fcr die Ausgabe von MurpleDeep. Hauptsache, die Namen (Signaturen) der Methoden sind gleich und die Argumente unterscheiden sich nur je nach Klasse. Mithilfe der Zwischenausdruckmethode mit dem Band-Argument erstellen wir eine Instanz von Visitor und rufen die Visit-Methode f\u00fcr MurpleDeep auf.<br \/>Unten ist der Code in Kotlin:<br \/><!-- iframe plugin v.5.1 wordpress.org\/plugins\/iframe\/ --><br \/>\n<iframe loading=\"lazy\" src=\"https:\/\/pl.kotl.in\/qsxky0Z8C\" width=\"360\" height=\"400\" scrolling=\"yes\" class=\"iframe-class\" frameborder=\"0\"><\/iframe>\n<\/p>\n<p>Die Ausgabe lautet: \u201e<strong><span class=\"standard-output darcula\">Dies ist die Band-Klasse<\/span><\/strong>&#8220;<\/p>\n<h3>Wie ist das m\u00f6glich?!<\/h3>\n<p>Warum das passiert, wird in vielen Artikeln mit klugen Worten beschrieben, auch auf Russisch, aber ich schlage vor, Sie stellen sich vor, wie der Compiler den Code sieht, vielleicht wird alles sofort klar:<br \/><!-- iframe plugin v.5.1 wordpress.org\/plugins\/iframe\/ --><br \/>\n<iframe loading=\"lazy\" src=\"https:\/\/pl.kotl.in\/oBsgszLCO\" width=\"360\" height=\"500\" scrolling=\"yes\" class=\"iframe-class\" frameborder=\"0\"><\/iframe>\n<\/p>\n<h3>Das Problem l\u00f6sen<\/h3>\n<p>Es gibt viele L\u00f6sungen, um dieses Problem zu l\u00f6sen. Als n\u00e4chstes betrachten wir eine L\u00f6sung, die das Besuchermuster verwendet.<br \/>Wir f\u00fcgen der abstrakten Klasse\/dem abstrakten Protokoll die Methode \u201eaccept\u201c mit dem Argument \u201eVisitor\u201c hinzu, rufen \u201evisitator.visit(this)\u201c innerhalb der Methode auf und f\u00fcgen dann eine \u00dcberschreibung\/Implementierung der Methode \u201eaccept\u201c zur Klasse \u201eMurpleDeep\u201c hinzu, wodurch wir wiederum entschieden und ruhig gegen DRY versto\u00dfen Besucher.visit(this).< br \/>Endg\u00fcltiger Code:<br \/><!-- iframe plugin v.5.1 wordpress.org\/plugins\/iframe\/ --><br \/>\n<iframe loading=\"lazy\" src=\"https:\/\/pl.kotl.in\/0fvYomzJd\" width=\"360\" height=\"500\" scrolling=\"yes\" class=\"iframe-class\" frameborder=\"0\"><\/iframe>\n<\/p>\n<h3>Quellen<\/h3>\n<p><a href=\"https:\/\/refactoring.guru\/ru\/design-patterns\/visitor-double-dispatch\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/refactoring.guru\/ru\/ design-patterns\/visitor-double-dispatch<\/a><\/p>\n<h3>Quellcode<\/h3>\n<p><a href=\"https:\/\/gitlab.com\/demensdeum\/patterns\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/gitlab.com\/demensdeum\/patterns<\/a><\/p >\n","protected":false},"excerpt":{"rendered":"<p>In diesem Beitrag beschreibe ich ein Designmuster namens \u201eBesucher\u201c. oder \u201eBesucher\u201cDieses Muster geh\u00f6rt zur Gruppe der Verhaltensmuster. Lass uns ein Problem finden Dieses Muster wird haupts\u00e4chlich verwendet, um die Beschr\u00e4nkung des Einzelversands in Sprachen mit fr\u00fcher Bindung zu umgehen. Alice X von NFGPhoto (CC-2.0)Lassen Sie uns eine abstrakte Klasse\/ein abstraktes Protokoll Band erstellen, eine Unterklasse<a class=\"more-link\" href=\"https:\/\/demensdeum.com\/blog\/de\/2019\/04\/13\/visitor-pattern\/\">Continue reading <span class=\"screen-reader-text\">&#8220;Besuchermuster&#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":[95,98],"class_list":["post-1790","post","type-post","status-publish","format-standard","hentry","category-techie","category-tutorials","tag-patterns","tag-visitor","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\/1790","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=1790"}],"version-history":[{"count":38,"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/posts\/1790\/revisions"}],"predecessor-version":[{"id":3960,"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/posts\/1790\/revisions\/3960"}],"wp:attachment":[{"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/media?parent=1790"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/categories?post=1790"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/tags?post=1790"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}