{"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\/fr\/2019\/04\/13\/visitor-pattern\/","title":{"rendered":"Mod\u00e8le de visiteur"},"content":{"rendered":"<p><em>Dans cet article, je d\u00e9crirai un mod\u00e8le de conception appel\u00e9 \u00ab\u00a0Visiteur\u00a0\u00bb\u00a0; ou &#8220;Visiteur&#8221;<br \/><\/em>Ce mod\u00e8le appartient au groupe des <strong>Mod\u00e8les comportementaux<\/strong>.<\/p>\n<h3>Trouvons un probl\u00e8me<\/h3>\n<p>Ce mod\u00e8le est principalement utilis\u00e9 pour contourner la limitation de l&#8217;envoi unique dans les langues \u00e0 liaison pr\u00e9coce.<\/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> par <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 \/>Cr\u00e9ons une classe\/protocole abstrait Band, cr\u00e9ons une sous-classe de MurpleDeep, cr\u00e9ons une classe Visitor avec deux m\u00e9thodes &#8211; un pour afficher n&#8217;importe quel descendant de Band sur la console, le second pour afficher n&#8217;importe quel MurpleDeep, l&#8217;essentiel est que les noms (signatures) des m\u00e9thodes soient les m\u00eames et que les arguments ne diff\u00e8rent que par classe. En utilisant la m\u00e9thode d&#8217;impression interm\u00e9diaire avec l&#8217;argument Band, nous cr\u00e9ons une instance de Visitor et appelons la m\u00e9thode de visite pour MurpleDeep.<br \/>Vous trouverez ci-dessous le code en Kotlin\u00a0:<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>Le r\u00e9sultat sera &#8220;<strong><span class=\"standard-output darcula\">Ceci est la classe Band<\/span><\/strong>&#8220;<\/p>\n<h3>Comment est-ce possible ?!<\/h3>\n<p>La raison pour laquelle cela se produit est d\u00e9crite avec des mots intelligents dans de nombreux articles, y compris en russe, mais je vous sugg\u00e8re d&#8217;imaginer comment le compilateur voit le code, peut-\u00eatre que tout deviendra clair tout de suite\u00a0:<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>R\u00e9soudre le probl\u00e8me<\/h3>\n<p>Il existe de nombreuses solutions pour r\u00e9soudre ce probl\u00e8me. Nous examinerons ensuite une solution utilisant le mod\u00e8le Visiteur.<br \/>Nous ajoutons la m\u00e9thode accept avec l&#8217;argument Visitor \u00e0 la classe\/protocole abstrait, appelons Visitors.visit(this) \u00e0 l&#8217;int\u00e9rieur de la m\u00e9thode, puis ajoutons une substitution\/impl\u00e9mentation de la m\u00e9thode accept \u00e0 la classe MurpleDeep, violant de mani\u00e8re d\u00e9cisive et calme DRY, en \u00e9crivant \u00e0 nouveau visiteur.visit(this).< br \/>Code final\u00a0:<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>Sources<\/h3>\n<p><a href=\"https:\/\/refactoring.guru\/ru\/design-patterns\/visitor-double-dispatch\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/refactoring.guru\/ru\/ mod\u00e8les de conception\/double exp\u00e9dition des visiteurs<\/a><\/p>\n<h3>Code source<\/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>Dans cet article, je d\u00e9crirai un mod\u00e8le de conception appel\u00e9 \u00ab\u00a0Visiteur\u00a0\u00bb\u00a0; ou &#8220;Visiteur&#8221;Ce mod\u00e8le appartient au groupe des Mod\u00e8les comportementaux. Trouvons un probl\u00e8me Ce mod\u00e8le est principalement utilis\u00e9 pour contourner la limitation de l&#8217;envoi unique dans les langues \u00e0 liaison pr\u00e9coce. Alice X par NFGPhoto (CC-2.0)Cr\u00e9ons une classe\/protocole abstrait Band, cr\u00e9ons une sous-classe de MurpleDeep,<a class=\"more-link\" href=\"https:\/\/demensdeum.com\/blog\/fr\/2019\/04\/13\/visitor-pattern\/\">Continue reading <span class=\"screen-reader-text\">&#8220;Mod\u00e8le de visiteur&#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":"fr","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\/fr\/wp-json\/wp\/v2\/posts\/1790","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/demensdeum.com\/blog\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/demensdeum.com\/blog\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/demensdeum.com\/blog\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/demensdeum.com\/blog\/fr\/wp-json\/wp\/v2\/comments?post=1790"}],"version-history":[{"count":38,"href":"https:\/\/demensdeum.com\/blog\/fr\/wp-json\/wp\/v2\/posts\/1790\/revisions"}],"predecessor-version":[{"id":3960,"href":"https:\/\/demensdeum.com\/blog\/fr\/wp-json\/wp\/v2\/posts\/1790\/revisions\/3960"}],"wp:attachment":[{"href":"https:\/\/demensdeum.com\/blog\/fr\/wp-json\/wp\/v2\/media?parent=1790"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/demensdeum.com\/blog\/fr\/wp-json\/wp\/v2\/categories?post=1790"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/demensdeum.com\/blog\/fr\/wp-json\/wp\/v2\/tags?post=1790"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}