{"id":55000735,"date":"2010-08-01T00:00:00","date_gmt":"2020-05-22T22:06:54","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=735"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Das_FactoryPattern","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/Das_FactoryPattern\/","title":{"rendered":"Das Factory-Pattern"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg07.met.vgwort.de\/na\/6854f211199442b0814b0d8d811faad2\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b>Wenn Sie mit der Verwendung von Interfaces vertraut sind und diese anwenden, um verschiedene Implementierungen einer Klasse einzusetzen, fehlt nur noch ein kleiner Schritt zur Entkopplung des aufrufenden Codes zu den genutzten Klassen. Dieser Beitrag zeigt, wie Sie das Factory-Pattern f&uuml;r die Erzeugung beliebiger Implementierungen einer Schnittstelle nutzen, ohne dass die aufrufende Prozedur einen Bezug zu dieser Implementierung hat.<\/b><\/p>\n<p>Der Beitrag <b>Schnittstellenvererbung <\/b>(<b>www.access-im-unternehmen.de\/734<\/b>) zeigt am Beispiel des Versands einer E-Mail, wie Sie eine Schnittstelle beziehungsweise ein Interface nutzen k&ouml;nnen, um eine von mehreren konkreten Implementierungen dieses Interfaces zu verwenden.<\/p>\n<p>Der Aufbau des dortigen Beispiels besteht aus einer Interface-Klasse namens <b>ISendMail<\/b>, welche die in einer Implementierung der <b>SendMail<\/b>-Klasse zu verwendenden Elemente, also Eigenschaften und Methoden, vorgibt (s. <a href=\"#anker-16-anchor\">Listing 1<\/a>).<\/p>\n<p class=\"listingueberschrift\">Listing 1: Beispiel f&uuml;r eine Interface-Klasse<\/p>\n<pre>Public Property Let Sender(strSender As String)\r\nEnd Property\r\nPublic Property Let Recipient(strRecipient As String)\r\nEnd Property\r\nPublic Property Let Subject(strSubject As String)\r\nEnd Property\r\nPublic Property Let Body(strBody As String)\r\nEnd Property\r\nPublic Function SendMail() As Boolean\r\nEnd Function<\/pre>\n<p>Eine konkrete Implementierung sieht dann wie in Bild 1 aus. Es kann gleich mehrere Klassen dieser Art geben, zum Beispiel <b>clsSendSMTPMail <\/b>oder <b>clsSendOutlookMail<\/b>. Gr&uuml;nde daf&uuml;r, mehrere gleichartige Implementierungen in ein Projekt einzubauen, gibt es viele: So k&ouml;nnen Sie beispielsweise eine Klasse zum Versenden von E-Mails via Outlook vorsehen, die immer dann eingesetzt wird, wenn auf dem Rechner, auf dem die Datenbankanwendung eingesetzt wird, Outlook vorhanden ist. Ist kein Outlook installiert, soll die E-Mail &uuml;ber den direkten Kontakt zum SMTP-Server verschickt werden, der beispielsweise mit den Methoden der <b>WinSock<\/b>-Klasse hergestellt werden kann.Die Outlook-Methode w&auml;re jedoch zu bevorzugen, weil der Benutzer die versendeten Mails hier jederzeit im Ordner der gesendeten Objekte nachhalten k&ouml;nnte.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2010_04\/FactoryPattern_5-web-images\/pic001.png\" alt=\"pic001.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 1: Implementierung einer Schnittstelle<\/span><\/b><\/p>\n<p>Um die Verwendung der Klassen zu vereinfachen, nutzen wir beispielsweise eine Prozedur, die nur die Parameter f&uuml;r den Mail-Versand und die Angabe der Versandart erwartet. Diese deklariert alle m&ouml;glichen Mail-Klassen und instanziert dann die jeweils ben&ouml;tigte (s. <a href=\"#anker-21-anchor\">Listing 2<\/a>).<\/p>\n<p class=\"listingueberschrift\">Listing 2: Konkrete Instanzierung von E-Mail-Klassen<\/p>\n<pre>Public Sub MailVersenden(strAbsender As String, strEmpfaenger As String, strBetreff As String, _\r\n        strInhalt As String, strVersandart As String)\r\n    Dim objSendSMTPMail As clsSendSMTPMail\r\n    Dim objSendOutlookMail As clsSendOutlookMail\r\n    Select Case strVersandart\r\n        Case &quot;SMTP&quot;\r\n            Set objSendSMTPMail = New clsSendSMTPMail\r\n            With objSendSMTPMail\r\n                .Sender = strAbsender\r\n                ''... weitere Zugriffe auf die Klasse\r\n            End With\r\n        Case &quot;Outlook&quot;\r\n            Set objSendOutlookMail = New clsSendOutlookMail\r\n            With objSendOutlookMail\r\n                .Sender = strAbsender\r\n                ''... weitere Zugriffe auf die Klasse\r\n            End With\r\n    End Select\r\nEnd Sub<\/pre>\n<p><!--30percent--><\/p>\n<p>Wenn wir statt mehrerer Objektvariablen f&uuml;r jede der konkreten Klassen nur eine Objektvariable namens <b>objSendMail <\/b>mit dem Datentyp der Schnittstelle <b>ISendMail <\/b>deklarieren, k&ouml;nnen wir der Objektvariablen <b>objSendMail <\/b>beim Instanzieren die jeweils ben&ouml;tigte Klasse zuweisen (s. <a href=\"#anker-22-anchor\">Listing 3<\/a>).<\/p>\n<p class=\"listingueberschrift\">Listing 3: Verwenden einer Schnittstelle<\/p>\n<pre>Public Sub MailVersenden(strAbsender As String, strEmpfaenger As String, strBetreff As String, _\r\n        strInhalt As String, strVersandart As String)\r\n    Dim objSendMail As ISendMail\r\n    Select Case strVersandart\r\n        Case &quot;SMTP&quot;\r\n            Set objSendMail = New clsSendSMTPMail\r\n        Case &quot;Outlook&quot;\r\n            Set objSendMail = New clsSendOutlookMail\r\n    End Select\r\n    With objSendMail\r\n        .Sender = strAbsender\r\n        ''... weitere Zugriffe auf die Klasse\r\n    End With\r\nEnd Sub<\/pre>\n<p>Dies spart eine Menge Code und somit Wartungsaufwand ein, denn wir haben nicht mehr zwei Objektvariablen, f&uuml;r die wir entsprechend auch alle n&ouml;tigen Eigenschaftszuweisungen und Methodenaufrufe programmieren m&uuml;ssen, sondern wir haben nur noch eine Objektvariable, die je nach Bedarf gef&uuml;llt wird und die Zugriffe auf die Eigenschaften und Methoden an die tats&auml;chliche Implementierung weiterreicht.<\/p>\n<p>Es fehlt jedoch noch ein entscheidender Schritt, denn die Beispielprozedur <b>MailVersenden <\/b>ist immer noch nicht nur von der Schnittstellenklasse <b>ISendMail<\/b>, sondern auch noch von deren Implementierungen <b>clsSendOutlookMail <\/b>und <b>clsSendSMTPMail <\/b>abh&auml;ngig: Immerhin werden diese noch per <b>New <\/b>instanziert und <b>objSendMail <\/b>zugewiesen.<\/p>\n<p>Damit dies nicht mehr n&ouml;tig ist, lagern Sie die Funktionalit&auml;t zum Erzeugen der ben&ouml;tigten <b>SendMail<\/b>-Klasse in eine Factory-Klasse aus. Diese hei&szlig;t <b>clsSendMailFactory <\/b>und enth&auml;lt schlicht die Funktion aus <a href=\"#anker-23-anchor\">Listing 4<\/a>. Die Funktion erwartet die Angabe eines Strings mit der Bezeichnung des zu verwendenden Mail-Verfahrens, also <b>Outlook <\/b>oder <b>SMTP<\/b>, und gibt die Instanz der entsprechenden Klasse an die aufrufende Prozedur zur&uuml;ck.<\/p>\n<p>Dementsprechend wird die aufrufende Prozedur <b>MailVersenden <\/b>wieder ein paar Zeilen schlanker, vor allem jedoch entziehen wir ihr Verantwortung und das letzte bisschen Kopplung an die eigentlichen Arbeitstiere dieses Beispiels &#8211; an die Klassen <b>clsSendOutlookMail <\/b>und <b>clsSendSMTPMail<\/b>.<\/p>\n<p class=\"listingueberschrift\">Listing 4: Einzige Funktion der Klasse clsSendMailFactory<\/p>\n<pre>Public Function CreateSendMail(strSendMail As String) As ISendMail\r\n    Select Case strSendMail\r\n        Case &quot;Outlook&quot;\r\n            Set CreateSendMail = New clsSendOutlookMail\r\n        Case &quot;SMTP&quot;\r\n            Set CreateSendMail = New clsSendSMTPMail\r\n    End Select\r\nEnd Function<\/pre>\n<p>Wie <a href=\"#anker-24-anchor\">Listing 5<\/a> zeigt, ist von diesen beiden Klassen nichts mehr zu sehen. Stattdessen kommt die Klasse <b>clsSendMailFactory <\/b>zum Einsatz, die sich im wahrsten Sinne des Wortes als Fabrik und somit als Hersteller der ben&ouml;tigten Klasse n&uuml;tzlich macht: Wir &uuml;bergeben ihrer einzigen Funktion <b>CreateSendMail <\/b>nur noch die Versandart und erhalten im Gegenzug einen Verweis auf die ben&ouml;tigte Klasse. Diese speichern wir in der Objektvariablen <b>objSendMail <\/b>auf Basis der ebenfalls von den konkreten Implementierungen unabh&auml;ngigen Schnittstellenklasse <b>ISendMail<\/b>.<\/p>\n<p class=\"listingueberschrift\">Listing 5: Neue Version der Methode zum Versenden der E-Mail<\/p>\n<pre>Public Sub MailVersenden(strAbsender As String, strEmpfaenger As String, strBetreff As String, _\r\n        strInhalt As String, strVersandart As String)\r\n    Dim objSendMail As ISendMail\r\n    Dim objSendMailFactory As clsSendMailFactory\r\n    Set objSendMailFactory = New clsSendMailFactory\r\n    Set objSendMail = objSendMailFactory.CreateSendMail(strVersandart)\r\n    With objSendMail\r\n        .Sender = strAbsender\r\n        .Recipient = strEmpfaenger\r\n        .Subject = strBetreff\r\n        .Body = strInhalt\r\n        If .SendMail = True Then\r\n            MsgBox &quot;Versand erfolgreich!&quot;\r\n        End If\r\n    End With\r\nEnd Sub<\/pre>\n<p>F&uuml;r dieses Beispiel gibt es noch ein wenig Optimierungspotenzial: Wie bereits oben erw&auml;hnt, soll die Entscheidung, ob Mails per Outlook oder direkt per SMTP verschickt werden sollen, nicht vom Benutzer, sondern allein von den Gegebenheiten auf dem jeweiligen Rechner abh&auml;ngen. Die Anwendung muss also irgendwo pr&uuml;fen, ob Outlook auf dem Rechner installiert ist, und somit f&uuml;r den Mailversand eingesetzt werden soll. Falls nicht, verwendet die Beispiell&ouml;sung den direkten Versand via SMTP.<\/p>\n<p>Die Pr&uuml;fung k&ouml;nnte nun dort stattfinden, wo die Prozedur MailVersenden aufgerufen wird, und der entsprechende Wert mit dem Parameter <b>strVersandart <\/b>&uuml;bergeben werden.<\/p>\n<p>Noch besser w&auml;re es an dieser Stelle jedoch, wenn die Factory-Klasse selbst die Codezeilen enthielte, welche festlegen, ob Outlook oder SMTP verwendet wird. Dann k&ouml;nnte man sowohl den Parameter <b>strVersandart<\/b> aus der Prozedur <b>MailVersenden <\/b>streichen als auch den Parameter <b>strSendmail <\/b>der Funktion <b>CreateSendMail<\/b>. Die <b>Factory<\/b>-Funktion <b>CreateSendMail <\/b>w&uuml;rde dann ganz selbstst&auml;ndig die jeweils zu pr&auml;ferierende Klasse f&uuml;r den Mailversand zur&uuml;ckgeben.<\/p>\n<p><b>Zusammenfassung und Ausblick<\/b><\/p>\n<p>Ein Beispiel f&uuml;r den Einsatz der Schnittstellenvererbung und des Factory-Patterns finden Sie im Beitrag <b>Tabellen und Felder dokumentieren <\/b>(<b>www.access-im-unternehmen.de\/738<\/b>).<\/p>\n<h3>Downloads zu diesem Beitrag<\/h3>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>FactoryPattern.mdb<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/{18AC331E-3927-4C98-A097-21AD9C643C96}\/aiu_735.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Wenn Sie mit der Verwendung von Interfaces vertraut sind und diese anwenden, um verschiedene Implementierungen einer Klasse einzusetzen, fehlt nur noch ein kleiner Schritt zur Entkopplung des aufrufenden Codes zu den genutzten Klassen. Dieser Beitrag zeigt, wie Sie das Factory-Pattern f&uuml;r die Erzeugung beliebiger Implementierungen einer Schnittstelle nutzen, ohne dass die aufrufende Prozedur einen Bezug zu dieser Implementierung hat.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[662010,66042010,44000025],"tags":[],"class_list":["post-55000735","post","type-post","status-publish","format-standard","hentry","category-662010","category-66042010","category-VBA_und_Programmiertechniken"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.9 (Yoast SEO v27.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Das Factory-Pattern - Access im Unternehmen<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/access-im-unternehmen.de\/Das_FactoryPattern\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Das Factory-Pattern\" \/>\n<meta property=\"og:description\" content=\"Wenn Sie mit der Verwendung von Interfaces vertraut sind und diese anwenden, um verschiedene Implementierungen einer Klasse einzusetzen, fehlt nur noch ein kleiner Schritt zur Entkopplung des aufrufenden Codes zu den genutzten Klassen. Dieser Beitrag zeigt, wie Sie das Factory-Pattern f&uuml;r die Erzeugung beliebiger Implementierungen einer Schnittstelle nutzen, ohne dass die aufrufende Prozedur einen Bezug zu dieser Implementierung hat.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/Das_FactoryPattern\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2020-05-22T22:06:54+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg07.met.vgwort.de\/na\/6854f211199442b0814b0d8d811faad2\" \/>\n<meta name=\"author\" content=\"Andr\u00e9 Minhorst\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Andr\u00e9 Minhorst\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"6\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Das_FactoryPattern\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Das_FactoryPattern\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"Das Factory-Pattern\",\"datePublished\":\"2020-05-22T22:06:54+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Das_FactoryPattern\\\/\"},\"wordCount\":883,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Das_FactoryPattern\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/6854f211199442b0814b0d8d811faad2\",\"articleSection\":[\"2010\",\"4\\\/2010\",\"VBA und Programmiertechniken\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Das_FactoryPattern\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Das_FactoryPattern\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Das_FactoryPattern\\\/\",\"name\":\"Das Factory-Pattern - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Das_FactoryPattern\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Das_FactoryPattern\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/6854f211199442b0814b0d8d811faad2\",\"datePublished\":\"2020-05-22T22:06:54+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Das_FactoryPattern\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Das_FactoryPattern\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Das_FactoryPattern\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/6854f211199442b0814b0d8d811faad2\",\"contentUrl\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/6854f211199442b0814b0d8d811faad2\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Das_FactoryPattern\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Das Factory-Pattern\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\",\"name\":\"Access im Unternehmen\",\"description\":\"Das Magazin f\u00fcr Datenbankentwickler auf Basis von Microsoft Access\",\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/access-im-unternehmen.de\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\",\"name\":\"Andr\u00e9 Minhorst Verlag\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/aiu_wp.png\",\"contentUrl\":\"https:\\\/\\\/access-im-unternehmen.de\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/aiu_wp.png\",\"width\":370,\"height\":111,\"caption\":\"Andr\u00e9 Minhorst Verlag\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\",\"name\":\"Andr\u00e9 Minhorst\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"caption\":\"Andr\u00e9 Minhorst\"}}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Das Factory-Pattern - Access im Unternehmen","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/access-im-unternehmen.de\/Das_FactoryPattern\/","og_locale":"de_DE","og_type":"article","og_title":"Das Factory-Pattern","og_description":"Wenn Sie mit der Verwendung von Interfaces vertraut sind und diese anwenden, um verschiedene Implementierungen einer Klasse einzusetzen, fehlt nur noch ein kleiner Schritt zur Entkopplung des aufrufenden Codes zu den genutzten Klassen. Dieser Beitrag zeigt, wie Sie das Factory-Pattern f&uuml;r die Erzeugung beliebiger Implementierungen einer Schnittstelle nutzen, ohne dass die aufrufende Prozedur einen Bezug zu dieser Implementierung hat.","og_url":"https:\/\/access-im-unternehmen.de\/Das_FactoryPattern\/","og_site_name":"Access im Unternehmen","article_published_time":"2020-05-22T22:06:54+00:00","og_image":[{"url":"http:\/\/vg07.met.vgwort.de\/na\/6854f211199442b0814b0d8d811faad2","type":"","width":"","height":""}],"author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"6\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/Das_FactoryPattern\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/Das_FactoryPattern\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"Das Factory-Pattern","datePublished":"2020-05-22T22:06:54+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Das_FactoryPattern\/"},"wordCount":883,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Das_FactoryPattern\/#primaryimage"},"thumbnailUrl":"http:\/\/vg07.met.vgwort.de\/na\/6854f211199442b0814b0d8d811faad2","articleSection":["2010","4\/2010","VBA und Programmiertechniken"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/Das_FactoryPattern\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/Das_FactoryPattern\/","url":"https:\/\/access-im-unternehmen.de\/Das_FactoryPattern\/","name":"Das Factory-Pattern - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Das_FactoryPattern\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Das_FactoryPattern\/#primaryimage"},"thumbnailUrl":"http:\/\/vg07.met.vgwort.de\/na\/6854f211199442b0814b0d8d811faad2","datePublished":"2020-05-22T22:06:54+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/Das_FactoryPattern\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/Das_FactoryPattern\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/Das_FactoryPattern\/#primaryimage","url":"http:\/\/vg07.met.vgwort.de\/na\/6854f211199442b0814b0d8d811faad2","contentUrl":"http:\/\/vg07.met.vgwort.de\/na\/6854f211199442b0814b0d8d811faad2"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/Das_FactoryPattern\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"Das Factory-Pattern"}]},{"@type":"WebSite","@id":"https:\/\/access-im-unternehmen.de\/#website","url":"https:\/\/access-im-unternehmen.de\/","name":"Access im Unternehmen","description":"Das Magazin f\u00fcr Datenbankentwickler auf Basis von Microsoft Access","publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/access-im-unternehmen.de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Organization","@id":"https:\/\/access-im-unternehmen.de\/#organization","name":"Andr\u00e9 Minhorst Verlag","url":"https:\/\/access-im-unternehmen.de\/","logo":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/logo\/image\/","url":"https:\/\/access-im-unternehmen.de\/wp-content\/uploads\/2019\/09\/aiu_wp.png","contentUrl":"https:\/\/access-im-unternehmen.de\/wp-content\/uploads\/2019\/09\/aiu_wp.png","width":370,"height":111,"caption":"Andr\u00e9 Minhorst Verlag"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f","name":"Andr\u00e9 Minhorst","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","caption":"Andr\u00e9 Minhorst"}}]}},"_links":{"self":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55000735","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/comments?post=55000735"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55000735\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55000735"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55000735"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55000735"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}