{"id":2022,"date":"2019-05-30T09:00:37","date_gmt":"2019-05-30T06:00:37","guid":{"rendered":"http:\/\/demensdeum.com\/blog\/?p=2022"},"modified":"2024-12-16T22:32:37","modified_gmt":"2024-12-16T19:32:37","slug":"chain-of-responsibility-pattern","status":"publish","type":"post","link":"https:\/\/demensdeum.com\/blog\/fr\/2019\/05\/30\/chain-of-responsibility-pattern\/","title":{"rendered":"Mod\u00e8le de cha\u00eene de responsabilit\u00e9"},"content":{"rendered":"<p>La cha\u00eene de responsabilit\u00e9 fait r\u00e9f\u00e9rence aux mod\u00e8les de conception comportementale.<\/p>\n<p><a href=\"https:\/\/www.flickr.com\/photos\/122565603@N02\/13689239584\/\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-2025\" src=\"https:\/\/demensdeum.com\/blog\/wp-content\/uploads\/2019\/05\/13689239584_12c1c20ebc_z1.jpg\" alt=\"\" width=\"427\" height=\"640\" \/><\/a><br \/>\n<a class=\"owner-name truncate no-outline\" title=\"Aller au flux de photos de Ganna Dolbieva\" href=\"https:\/\/www.flickr.com\/photos\/122565603@N02\/\" target=\"_blank\" rel=\" noopener\" data-track=\"attributionNameClick\">Ganna Dolbieva<\/a><\/p>\n<p>La soci\u00e9t\u00e9 cin\u00e9matographique Jah-Pictures a r\u00e9alis\u00e9 un film documentaire sur les rastafariens communistes du Lib\u00e9ria intitul\u00e9 \u00ab Red Dawn of Marley \u00bb. Le film est tr\u00e8s long (8 heures), int\u00e9ressant, mais avant sa sortie, il s&#8217;est av\u00e9r\u00e9 que dans certains pays, les plans et les phrases du film peuvent \u00eatre consid\u00e9r\u00e9s comme une h\u00e9r\u00e9sie et ne recevront pas de licence de distribution. Les producteurs du film d\u00e9cident de supprimer manuellement et automatiquement les moments contenant des phrases douteuses du film. Une double v\u00e9rification est n\u00e9cessaire afin que les repr\u00e9sentants du distributeur ne soient pas simplement abattus dans certains pays en cas d&#8217;erreur lors de l&#8217;inspection manuelle et de l&#8217;installation.<br \/>Les pays sont divis\u00e9s en quatre groupes\u00a0: pays sans censure, avec une censure mod\u00e9r\u00e9e, moyenne et tr\u00e8s stricte. Il est d\u00e9cid\u00e9 d&#8217;utiliser des r\u00e9seaux de neurones pour classer le niveau d&#8217;h\u00e9r\u00e9sie dans le fragment regard\u00e9 du film. Pour le projet, des neurones de pointe tr\u00e8s co\u00fbteux sont achet\u00e9s, entra\u00een\u00e9s pour diff\u00e9rents niveaux de censure, la t\u00e2che du d\u00e9veloppeur &#8211; la t\u00e2che du d\u00e9veloppeur. divisez le film en fragments et transmettez-les \u00e0 travers une cha\u00eene de r\u00e9seaux neuronaux, de libre \u00e0 strict, jusqu&#8217;\u00e0 ce que l&#8217;un d&#8217;eux d\u00e9tecte une h\u00e9r\u00e9sie, puis le fragment est transf\u00e9r\u00e9 pour examen manuel en vue d&#8217;un montage ult\u00e9rieur. Il est impossible de traverser tous les neurones, car leur travail n\u00e9cessite trop de puissance de calcul (apr\u00e8s tout, il faut quand m\u00eame payer l&#8217;\u00e9lectricit\u00e9), il suffit de s&#8217;arr\u00eater au premier qui fonctionne.<br \/>Impl\u00e9mentation na\u00efve du pseudocode\u00a0:<\/p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-numbers lang-unknown\" data-lang=\"unknown\"><code>import StateOfArtCensorshipHLNNClassifiers\n\nprotocol MovieCensorshipClassifier {\n    func shouldBeCensored(movieChunk: MovieChunk) -&gt; Bool\n}\n\nclass CensorshipClassifier: MovieCensorshipClassifier {\n\n    let hnnclassifier: StateOfArtCensorshipHLNNClassifier\n\n    init(_ hnnclassifier: StateOfArtCensorshipHLNNClassifier) {\n        self.hnnclassifier = hnnclassifier\n    }\n    \n    func shouldBeCensored(_ movieChunk: MovieChunk) -&gt; Bool {\n        return hnnclassifier.shouldBeCensored(movieChunk)\n    }\n}\n\nlet lightCensorshipClassifier = CensorshipClassifier(StateOfArtCensorshipHLNNClassifier(\"light\"))\nlet normalCensorshipClassifier = CensorshipClassifier(StateOfArtCensorshipHLNNClassifier(\"normal\"))\nlet hardCensorshipClassifier = CensorshipClassifier(StateOfArtCensorshipHLNNClassifier(\"hard\"))\n\nlet classifiers = [lightCensorshipClassifier, normalCensorshipClassifier, hardCensorshipClassifier]\n\nlet movie = Movie(\"Red Jah rising\")\nfor chunk in movie.chunks {\n    for classifier in classifiers {\n        if classifier.shouldBeCensored(chunk) == true {\n            print(\"Should censor movie chunk: \\(chunk), reported by \\(classifier)\")\n        }\n   }\n}\n<\/code><\/pre>\n<\/div>\n<p>En g\u00e9n\u00e9ral, la solution avec un tableau de classificateurs n&#8217;est pas si mauvaise, cependant\u00a0! Imaginons que nous ne puissions pas cr\u00e9er de tableau, nous avons la possibilit\u00e9 de cr\u00e9er une seule entit\u00e9 classificatrice, qui d\u00e9termine d\u00e9j\u00e0 le type de censure pour un fragment de film. De telles restrictions sont possibles lors du d\u00e9veloppement d&#8217;une biblioth\u00e8que qui \u00e9tend les fonctionnalit\u00e9s de l&#8217;application (plugin).<br \/>Utilisons le mod\u00e8le de d\u00e9corateur &#8211; Ajoutons une r\u00e9f\u00e9rence au classificateur suivant de la cha\u00eene \u00e0 la classe du classificateur et arr\u00eatons le processus de v\u00e9rification \u00e0 la premi\u00e8re classification r\u00e9ussie.<br \/>Ainsi, nous impl\u00e9mentons le mod\u00e8le de cha\u00eene de responsabilit\u00e9\u00a0:<\/p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-numbers lang-unknown\" data-lang=\"unknown\"><code>import StateOfArtCensorshipHLNNClassifiers\n\nprotocol MovieCensorshipClassifier {\n    func shouldBeCensored(movieChunk: MovieChunk) -&gt; Bool\n}\n\nclass CensorshipClassifier: MovieCensorshipClassifier {\n\n    let nextClassifier: CensorshipClassifier?\n    let hnnclassifier: StateOfArtCensorshipHLNNClassifier\n\n    init(_ hnnclassifier: StateOfArtCensorshipHLNNClassifier, nextClassifier: CensorshipClassifiers?) {\n            self.nextClassifier = nextClassifier\n            self.hnnclassifier = hnnclassifier\n    }\n    \n    func shouldBeCensored(_ movieChunk: MovieChunk) -&gt; Bool {\n        let result = hnnclassifier.shouldBeCensored(movieChunk)\n        \n        print(\"Should censor movie chunk: \\(movieChunk), reported by \\(self)\")\n        \n        if result == true {\n                return true\n        }\n        else {\n                return nextClassifier?.shouldBeCensored(movieChunk) ?? false\n        }\n    }\n}\n\nlet censorshipClassifier = CensorshipClassifier(StateOfArtCensorshipHLNNClassifier(\"light\"), nextClassifier: CensorshipClassifier(StateOfArtCensorshipHLNNClassifier(\"normal\", nextClassifier: CensorshipClassifier(StateOfArtCensorshipHLNNClassifier(\"hard\")))))\n\nlet movie = Movie(\"Red Jah rising\")\nfor chunk in movie.chunks {\n    censorshipClassifier.shouldBeCensored(chunk)\n}\n<\/code><\/pre>\n<\/div>\n<h3>R\u00e9f\u00e9rences<\/h3>\n<p><a href=\"https:\/\/refactoring.guru\/ru\/design-patterns\/chain-of-responsibility\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/refactoring.guru\/ru\/ mod\u00e8les de conception\/cha\u00eene de responsabilit\u00e9<\/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><\/p>\n","protected":false},"excerpt":{"rendered":"<p>La cha\u00eene de responsabilit\u00e9 fait r\u00e9f\u00e9rence aux mod\u00e8les de conception comportementale. Ganna Dolbieva La soci\u00e9t\u00e9 cin\u00e9matographique Jah-Pictures a r\u00e9alis\u00e9 un film documentaire sur les rastafariens communistes du Lib\u00e9ria intitul\u00e9 \u00ab Red Dawn of Marley \u00bb. Le film est tr\u00e8s long (8 heures), int\u00e9ressant, mais avant sa sortie, il s&#8217;est av\u00e9r\u00e9 que dans certains pays, les<a class=\"more-link\" href=\"https:\/\/demensdeum.com\/blog\/fr\/2019\/05\/30\/chain-of-responsibility-pattern\/\">Continue reading <span class=\"screen-reader-text\">&#8220;Mod\u00e8le de cha\u00eene de responsabilit\u00e9&#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":[105,95],"class_list":["post-2022","post","type-post","status-publish","format-standard","hentry","category-techie","category-tutorials","tag-chain-of-responsibility","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\/2022","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=2022"}],"version-history":[{"count":18,"href":"https:\/\/demensdeum.com\/blog\/fr\/wp-json\/wp\/v2\/posts\/2022\/revisions"}],"predecessor-version":[{"id":3956,"href":"https:\/\/demensdeum.com\/blog\/fr\/wp-json\/wp\/v2\/posts\/2022\/revisions\/3956"}],"wp:attachment":[{"href":"https:\/\/demensdeum.com\/blog\/fr\/wp-json\/wp\/v2\/media?parent=2022"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/demensdeum.com\/blog\/fr\/wp-json\/wp\/v2\/categories?post=2022"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/demensdeum.com\/blog\/fr\/wp-json\/wp\/v2\/tags?post=2022"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}