{"id":2335,"date":"2019-11-05T22:16:25","date_gmt":"2019-11-05T19:16:25","guid":{"rendered":"http:\/\/demensdeum.com\/blog\/?p=2335"},"modified":"2024-12-16T22:32:32","modified_gmt":"2024-12-16T19:32:32","slug":"factory-method-pattern","status":"publish","type":"post","link":"https:\/\/demensdeum.com\/blog\/fr\/2019\/11\/05\/factory-method-pattern\/","title":{"rendered":"M\u00e9thode d&#8217;usine"},"content":{"rendered":"<p><a href=\"https:\/\/pxhere.com\/en\/photo\/1070638\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-2346\" src=\"https:\/\/demensdeum.com\/blog\/wp-content\/uploads\/2019\/11\/crates.jpg\" alt=\"\" width=\"520\" height=\"375\" srcset=\"https:\/\/demensdeum.com\/blog\/wp-content\/uploads\/2019\/11\/crates.jpg 520w, https:\/\/demensdeum.com\/blog\/wp-content\/uploads\/2019\/11\/crates-300x216.jpg 300w\" sizes=\"auto, (max-width: 520px) 100vw, 520px\" \/><\/a><\/p>\n<p>Le mod\u00e8le <b>Factory Method<\/b> fait r\u00e9f\u00e9rence \u00e0 des mod\u00e8les de conception g\u00e9n\u00e9ratifs.<br \/>Ce mod\u00e8le d\u00e9crit la cr\u00e9ation d&#8217;une interface pour cr\u00e9er un objet d&#8217;une classe sp\u00e9cifique. Cela semble simple, non\u00a0?<\/p>\n<h3>En th\u00e9orie<\/h3>\n<p>Supposons que nous d\u00e9veloppions un cadre pour travailler avec des lunettes AR. Lorsque vous inclinez la t\u00eate sur le c\u00f4t\u00e9, un menu d&#8217;applications disponibles devrait appara\u00eetre devant les yeux de l&#8217;utilisateur. Les applications seront d\u00e9velopp\u00e9es par des soci\u00e9t\u00e9s tierces, clientes de notre framework. Naturellement, nous ne savons pas quelles applications, ic\u00f4nes, noms doivent appara\u00eetre, nous devons donc fournir une interface pour impl\u00e9menter l&#8217;ic\u00f4ne et les informations associ\u00e9es sur l&#8217;application. Appelons-le <b>Produit\u00a0:<\/b><\/p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-numbers lang-unknown\" data-lang=\"unknown\"><code>protocol Product {\n var name: String { get }\n var image: Image { get }\n var executablePath: String { get }\n}\n<\/code><\/pre>\n<\/div>\n<p>Ensuite, nous devons fournir une interface afin que nos clients puissent mettre en \u0153uvre la d\u00e9livrance d&#8217;une gamme d&#8217;applications pour leur <b>Produit sp\u00e9cifique<\/b> &#8211; un tableau d&#8217;ic\u00f4nes d&#8217;application avec des noms, que nous dessinerons d\u00e9j\u00e0 dans le framework.<\/p>\n<p>\u00c9crivons cette interface &#8211; Interface <b>Creator<\/b> contenant une <b>M\u00e9thode Factory<\/b> renvoyant un tableau de <b>Produits<\/b>.<\/p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-numbers lang-unknown\" data-lang=\"unknown\"><code>protocol Creator {\n func factoryMethod() -> [Product]\n}\n<\/code><\/pre>\n<\/div>\n<h3>En pratique<\/h3>\n<p>Le premier client de notre framework AR \u00e9tait la soci\u00e9t\u00e9 7B &#8211; principal fournisseur de logiciels pour cafeti\u00e8res au <em>Honduras<\/em>. Ils souhaitent vendre des lunettes de r\u00e9alit\u00e9 augment\u00e9e capables de pr\u00e9parer du caf\u00e9, de v\u00e9rifier si l&#8217;eau ou les grains sont pleins et d&#8217;indiquer le chemin jusqu&#8217;\u00e0 la cafeti\u00e8re la plus proche en utilisant le mode carte int\u00e9rieure.<\/p>\n<p>Ils se chargent du d\u00e9veloppement du logiciel\u00a0; nous sommes uniquement tenus de fournir une documentation sur les interfaces <b>Creator<\/b> et <b>Produit<\/b> pour le bon affichage de la liste des applications et leurs suites. lancer.<\/p>\n<p>Apr\u00e8s avoir transf\u00e9r\u00e9 la documentation, la soci\u00e9t\u00e9 7B, \u00e0 l&#8217;aide de l&#8217;interface <b>Creator <\/b>, impl\u00e9mente le <b>Specific Creator <\/b>&#8211; classe renvoyant un tableau d\u2019ic\u00f4nes d\u2019application. Les applications d&#8217;ic\u00f4nes elles-m\u00eames sont des classes <b>Produit sp\u00e9cifique<\/b> qui impl\u00e9mentent l&#8217;interface <b>Produit<\/b>.<\/p>\n<p>Exemple de code pour <b>Produits sp\u00e9cifiques<\/b>\u00a0:<\/p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-numbers lang-unknown\" data-lang=\"unknown\"><code>class CoffeeMachineLocator: implements Product {\n let name = \u201c7B Coffee Machine Locator v.3000\u201d\n let image = Image.atPath(\u201cimages\/locator.tga\u201d)\n let executablePath = \u201cCoffeeMachineLocator.wasm\u201d\n}\n\nclass iPuchinno: implements Product {\n let name = \u201ciPuchinno 1.0.3\u201d\n let image = Image.atPath(\u201cimages\/puchino.pvrtc\u201d)\n let executablePath = \u201cneutron\/ipuchBugFixFinalNoFreezeFixAlpha4.js\u201d\n}\n<\/code><\/pre>\n<\/div>\n<p>Classe <b>Concrete Creator<\/b>, offrant un \u00e9ventail de deux applications\u00a0:<\/p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-numbers lang-unknown\" data-lang=\"unknown\"><code>class 7BAppsCreator: implements Creator {\n func factoryMethod() -> [Product] {\n  return [CoffeeMachineLocator(), iPuchinno()]\n }\n}\n<\/code><\/pre>\n<\/div>\n<p>Apr\u00e8s cela, la soci\u00e9t\u00e9 7B compile la biblioth\u00e8que de <b>Concrete Products<\/b>, <b>Concrete Creator<\/b> et la combine avec notre framework, commence \u00e0 vendre des lunettes AR pour ses cafeti\u00e8res, <em >ajouts de notre part non requis<\/em>.<\/p>\n<h3>Sources<\/h3>\n<p><a href=\"https:\/\/refactoring.guru\/ru\/design-patterns\/command\" target=\"_blank\" rel=\"noopener\">https:\/\/refactoring.guru\/ru\/design-patterns\/command <\/a><br \/><a href=\"https:\/\/www.amazon.com\/Design-Patterns-Elements-Reusable-Object-Oriented\/dp\/0201633612\" target=\"_blank\" rel=\"noopener\">https:\/\/www.amazon.com\/Design-Patterns-Elements-Reusable-Object-Oriented\/dp\/0201633612<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Le mod\u00e8le Factory Method fait r\u00e9f\u00e9rence \u00e0 des mod\u00e8les de conception g\u00e9n\u00e9ratifs.Ce mod\u00e8le d\u00e9crit la cr\u00e9ation d&#8217;une interface pour cr\u00e9er un objet d&#8217;une classe sp\u00e9cifique. Cela semble simple, non\u00a0? En th\u00e9orie Supposons que nous d\u00e9veloppions un cadre pour travailler avec des lunettes AR. Lorsque vous inclinez la t\u00eate sur le c\u00f4t\u00e9, un menu d&#8217;applications disponibles<a class=\"more-link\" href=\"https:\/\/demensdeum.com\/blog\/fr\/2019\/11\/05\/factory-method-pattern\/\">Continue reading <span class=\"screen-reader-text\">&#8220;M\u00e9thode d&#8217;usine&#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":[128,95],"class_list":["post-2335","post","type-post","status-publish","format-standard","hentry","category-techie","category-tutorials","tag-factory-method","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\/2335","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=2335"}],"version-history":[{"count":15,"href":"https:\/\/demensdeum.com\/blog\/fr\/wp-json\/wp\/v2\/posts\/2335\/revisions"}],"predecessor-version":[{"id":3934,"href":"https:\/\/demensdeum.com\/blog\/fr\/wp-json\/wp\/v2\/posts\/2335\/revisions\/3934"}],"wp:attachment":[{"href":"https:\/\/demensdeum.com\/blog\/fr\/wp-json\/wp\/v2\/media?parent=2335"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/demensdeum.com\/blog\/fr\/wp-json\/wp\/v2\/categories?post=2335"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/demensdeum.com\/blog\/fr\/wp-json\/wp\/v2\/tags?post=2335"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}