{"id":2135,"date":"2019-08-24T23:15:27","date_gmt":"2019-08-24T20:15:27","guid":{"rendered":"http:\/\/demensdeum.com\/blog\/?p=2135"},"modified":"2024-12-16T22:32:35","modified_gmt":"2024-12-16T19:32:35","slug":"observer-pattern","status":"publish","type":"post","link":"https:\/\/demensdeum.com\/blog\/fr\/2019\/08\/24\/observer-pattern\/","title":{"rendered":"Mod\u00e8le d&#8217;observateur"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-2151\" src=\"https:\/\/demensdeum.com\/blog\/wp-content\/uploads\/2019\/08\/binacular.jpg\" alt=\"\" width=\"256\" height=\"180\" \/><\/p>\n<p>Le mod\u00e8le Observer fait r\u00e9f\u00e9rence \u00e0 des mod\u00e8les de conception comportementale.<br \/>Le mod\u00e8le permet d&#8217;envoyer un changement d&#8217;\u00e9tat d&#8217;un objet aux abonn\u00e9s \u00e0 l&#8217;aide d&#8217;une interface commune.<br \/>Disons que nous d\u00e9veloppons un messager pour les programmeurs, nous avons un \u00e9cran de discussion dans l&#8217;application. Lorsque vous recevez un message avec le texte \u00ab probl\u00e8me \u00bb et \u00ab erreur \u00bb ou \u00ab quelque chose ne va pas \u00bb, vous devez colorer l&#8217;\u00e9cran de la liste d&#8217;erreurs et l&#8217;\u00e9cran des param\u00e8tres en rouge.<br \/>Ensuite, je d\u00e9crirai 2 options pour r\u00e9soudre le probl\u00e8me, la premi\u00e8re est simple mais extr\u00eamement difficile \u00e0 prendre en charge, et la seconde est beaucoup plus stable en termes de support, mais vous oblige \u00e0 tourner la t\u00eate lors de la mise en \u0153uvre initiale.<\/p>\n<h3>Bus commun<\/h3>\n<p>Toutes les impl\u00e9mentations du mod\u00e8le contiennent l&#8217;envoi de messages lorsque les donn\u00e9es changent, l&#8217;abonnement aux messages et un traitement ult\u00e9rieur dans les m\u00e9thodes. L&#8217;option de bus partag\u00e9 contient un seul objet (g\u00e9n\u00e9ralement un singleton) qui distribue les messages aux destinataires.<br \/>La simplicit\u00e9 de mise en \u0153uvre est la suivante\u00a0:<\/p>\n<ol>\n<li>L&#8217;objet envoie un message abstrait au bus partag\u00e9<\/li>\n<li>Un autre objet abonn\u00e9 au bus partag\u00e9 r\u00e9cup\u00e8re le message et d\u00e9cide de le traiter ou non.<\/li>\n<\/ol>\n<p>L&#8217;une des options d&#8217;impl\u00e9mentation disponibles aupr\u00e8s d&#8217;Apple (sous-syst\u00e8me NSNotificationCenter), ajout d&#8217;une correspondance entre l&#8217;en-t\u00eate du message et le nom de la m\u00e9thode appel\u00e9e par le destinataire lors de la livraison.<br \/>Le plus gros inconv\u00e9nient de cette approche \u2013 Si vous modifiez davantage le message, vous devrez d&#8217;abord vous souvenir, puis modifier manuellement tous les endroits o\u00f9 il est trait\u00e9 et envoy\u00e9. Il existe un cas de mise en \u0153uvre initiale rapide, suivie d&#8217;un support long et complexe qui n\u00e9cessite une base de connaissances pour un fonctionnement correct.<\/p>\n<h3>D\u00e9l\u00e9gu\u00e9 multidiffusion<\/h3>\n<p>Dans cette impl\u00e9mentation, nous cr\u00e9erons la classe d\u00e9l\u00e9gu\u00e9e multicast finale ; tout comme dans le cas d&#8217;un bus partag\u00e9, les objets peuvent s&#8217;y abonner pour recevoir des \u00ab messages \u00bb ou des \u00ab \u00e9v\u00e9nements \u00bb, mais le travail d&#8217;analyse et de filtrage des messages est non affect\u00e9 aux objets. Au lieu de cela, les classes d&#8217;abonn\u00e9s doivent impl\u00e9menter les m\u00e9thodes de multidiffusion du d\u00e9l\u00e9gu\u00e9 avec lesquelles il les notifie.<br \/>Ceci est impl\u00e9ment\u00e9 en utilisant des interfaces\/protocoles d\u00e9l\u00e9gu\u00e9s\u00a0; lorsque l&#8217;interface g\u00e9n\u00e9rale change, l&#8217;application ne sera plus construite, il sera alors n\u00e9cessaire de refaire tous les emplacements de traitement d&#8217;un message donn\u00e9, sans avoir besoin de maintenir une base de connaissances distincte. pour me souvenir de ces lieux. <em>Le compilateur est votre ami.<\/em><br \/>Cette approche augmente la productivit\u00e9 de l&#8217;\u00e9quipe, car il n&#8217;est pas n\u00e9cessaire d&#8217;\u00e9crire ou de stocker de la documentation, il n&#8217;est pas n\u00e9cessaire qu&#8217;un nouveau d\u00e9veloppeur essaie de comprendre comment un message et ses arguments sont trait\u00e9s, mais ils travaillent avec une interface pratique et compr\u00e9hensible. , c&#8217;est ainsi qu&#8217;est impl\u00e9ment\u00e9 le paradigme de la documentation par le code.<br \/>Le d\u00e9l\u00e9gu\u00e9 de multidiffusion lui-m\u00eame est bas\u00e9 sur le mod\u00e8le de d\u00e9l\u00e9gu\u00e9, dont je parlerai dans le prochain article.<\/p>\n<h3>Sources<\/h3>\n<p><a href=\"https:\/\/refactoring.guru\/ru\/design-patterns\/observer\" target=\"_blank\" rel=\"noopener\">https:\/\/refactoring.gu\/ru\/design-patterns\/observer <\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Le mod\u00e8le Observer fait r\u00e9f\u00e9rence \u00e0 des mod\u00e8les de conception comportementale.Le mod\u00e8le permet d&#8217;envoyer un changement d&#8217;\u00e9tat d&#8217;un objet aux abonn\u00e9s \u00e0 l&#8217;aide d&#8217;une interface commune.Disons que nous d\u00e9veloppons un messager pour les programmeurs, nous avons un \u00e9cran de discussion dans l&#8217;application. Lorsque vous recevez un message avec le texte \u00ab probl\u00e8me \u00bb et \u00ab<a class=\"more-link\" href=\"https:\/\/demensdeum.com\/blog\/fr\/2019\/08\/24\/observer-pattern\/\">Continue reading <span class=\"screen-reader-text\">&#8220;Mod\u00e8le d&#8217;observateur&#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":[112,95],"class_list":["post-2135","post","type-post","status-publish","format-standard","hentry","category-techie","category-tutorials","tag-observer","tag-patterns","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\/2135","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=2135"}],"version-history":[{"count":20,"href":"https:\/\/demensdeum.com\/blog\/fr\/wp-json\/wp\/v2\/posts\/2135\/revisions"}],"predecessor-version":[{"id":3948,"href":"https:\/\/demensdeum.com\/blog\/fr\/wp-json\/wp\/v2\/posts\/2135\/revisions\/3948"}],"wp:attachment":[{"href":"https:\/\/demensdeum.com\/blog\/fr\/wp-json\/wp\/v2\/media?parent=2135"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/demensdeum.com\/blog\/fr\/wp-json\/wp\/v2\/categories?post=2135"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/demensdeum.com\/blog\/fr\/wp-json\/wp\/v2\/tags?post=2135"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}