{"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\/de\/2019\/11\/05\/factory-method-pattern\/","title":{"rendered":"Fabrikmethode"},"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>Das <b>Factory-Methode<\/b>-Muster bezieht sich auf generative Designmuster.<br \/>Dieses Muster beschreibt die Erstellung einer Schnittstelle zum Erstellen eines Objekts einer bestimmten Klasse. Es scheint einfach, oder?<\/p>\n<h3>Theoretisch<\/h3>\n<p>Angenommen, wir entwickeln ein Framework f\u00fcr die Arbeit mit AR-Brillen. Wenn Sie den Kopf zur Seite neigen, sollte vor den Augen des Benutzers ein Men\u00fc mit verf\u00fcgbaren Anwendungen erscheinen. Anwendungen werden von Drittunternehmen entwickelt, die Kunden unseres Frameworks sind. Nat\u00fcrlich wissen wir nicht, welche Anwendungen, Symbole und Namen angezeigt werden sollen. Daher m\u00fcssen wir eine Schnittstelle bereitstellen, um das Symbol und die zugeh\u00f6rigen Informationen zur Anwendung zu implementieren. Nennen wir es <b>Produkt:<\/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>Als n\u00e4chstes m\u00fcssen wir eine Schnittstelle bereitstellen, damit unsere Kunden die Ausstellung einer Reihe von Anwendungen f\u00fcr ihr <b>spezifisches Produkt<\/b> implementieren k\u00f6nnen &#8211; eine Reihe von Anwendungssymbolen mit Namen, die wir bereits im Framework zeichnen werden.<\/p>\n<p>Lassen Sie uns diese Schnittstelle schreiben &#8211; <b>Creator<\/b>-Schnittstelle, die eine <b>Factory-Methode<\/b> enth\u00e4lt, die ein Array von <b>Produkten<\/b> zur\u00fcckgibt.<\/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>In der Praxis<\/h3>\n<p>Der erste Kunde unseres AR-Frameworks war die Firma 7B &#8211; f\u00fchrender Anbieter von Software f\u00fcr Kaffeemaschinen in <em>Honduras<\/em>. Sie m\u00f6chten Augmented-Reality-Brillen verkaufen, mit denen man Kaffee zubereiten, pr\u00fcfen kann, ob Wasser\/Bohnen voll sind, und mithilfe des Indoor-Kartenmodus den Weg zur n\u00e4chsten Kaffeemaschine zeigen kann.<\/p>\n<p>Sie \u00fcbernehmen die Entwicklung der Software; wir sind lediglich verpflichtet, eine Dokumentation zu den Schnittstellen <b>Creator<\/b> und <b>Product<\/b> f\u00fcr die korrekte Anzeige der Liste der Anwendungen und deren Weitergabe bereitzustellen starten.<\/p>\n<p>Nach der \u00dcbertragung der Dokumentation implementiert Unternehmen 7B mithilfe der <b>Creator <\/b>-Schnittstelle den <b>Specific Creator <\/b>&#8211; Klasse, die ein Array von Anwendungssymbolen zur\u00fcckgibt. Die Symbolanwendungen selbst sind <b>spezifische Produktklassen<\/b>, die die <b>Produkt<\/b>-Schnittstelle implementieren.<\/p>\n<p>Beispielcode f\u00fcr <b>Spezifische Produkte<\/b>:<\/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>Klasse <b>Concrete Creator<\/b>, die ein Array von zwei Anwendungen ergibt:<\/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>Danach stellt das Unternehmen 7B die Bibliothek von <b>Concrete Products<\/b>, <b>Concrete Creator<\/b>, zusammen, kombiniert sie mit unserem Framework und beginnt mit dem Verkauf von AR-Brillen f\u00fcr seine Kaffeemaschinen, <em >Erg\u00e4nzungen unsererseits nicht erforderlich<\/em>.<\/p>\n<h3>Quellen<\/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>Das Factory-Methode-Muster bezieht sich auf generative Designmuster.Dieses Muster beschreibt die Erstellung einer Schnittstelle zum Erstellen eines Objekts einer bestimmten Klasse. Es scheint einfach, oder? Theoretisch Angenommen, wir entwickeln ein Framework f\u00fcr die Arbeit mit AR-Brillen. Wenn Sie den Kopf zur Seite neigen, sollte vor den Augen des Benutzers ein Men\u00fc mit verf\u00fcgbaren Anwendungen erscheinen. Anwendungen<a class=\"more-link\" href=\"https:\/\/demensdeum.com\/blog\/de\/2019\/11\/05\/factory-method-pattern\/\">Continue reading <span class=\"screen-reader-text\">&#8220;Fabrikmethode&#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":"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\/2335","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=2335"}],"version-history":[{"count":15,"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/posts\/2335\/revisions"}],"predecessor-version":[{"id":3934,"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/posts\/2335\/revisions\/3934"}],"wp:attachment":[{"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/media?parent=2335"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/categories?post=2335"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/tags?post=2335"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}