Latest / Coding Buddies | Tech & Dev-Mindset / #120 Design Patterns 2 - Code aus der Fabrik
Transcript
- 0:00Dieses Interface wurde für den Cheeseburger implementiert, das
- 0:03heißt Brötchen, keine Ahnung, Patty, was kommt, da kommt da
- 0:07überhaupt noch ne Gurke drauf, keine Ahnung was war da glaub
- 0:10ich noch nie drauf. Ne.
- 0:11Coding Buddies Dein Podcast rund um Softwareentwicklung und
- 0:15aktueller Tech News herzlich Willkommen.
- 0:29Einen wunderschönen guten Tag und herzlich Willkommen zur
- 0:33neuen Folge vom Coding Buddies Podcast und Tino begrüße ich
- 0:38hier ganz herzlich und ich hoffe, Tino, Du hast auch einen
- 0:41so wunderschönen Tag, wie ich ihn gerade allen hier gewünscht.
- 0:43Habe ja Moin Moin fabi, ja ich habe einen super Tag, es ist
- 0:49tolles Wetter, ich genieße das so richtig drin zu sein und.
- 0:54Um mit dir jetzt n Podcast aufzunehmen.
- 0:56Ich hab Bock, ich hab Bock. Das ist sehr gut, das freut
- 0:58mich. Wir haben nämlich auch heute
- 1:00wieder n sehr interessantes Thema.
- 1:02Also ich freu mich auf die Folge, ich hab da echt Bock
- 1:04drauf, hab ich ja sonst auch immer, aber irgendwie weißt du
- 1:07es gibt immer mal so da da da stehst du morgens auf und denkst
- 1:11dir heute n Podcast aufnehmen. Fühl ich so mit dem Thema.
- 1:17Ja, ich find es auch. Was haben wir denn so?
- 1:18Wir haben ja n ganz cooles Thema heute und zwar wollen wir so
- 1:22richtig durchstarten mit unserer neuen Reihe zum Thema Design
- 1:26Pattern und quasi heute mal so das erste Pattern besprechen.
- 1:31Doch bevor wir sagen, welches das ist und so richtig
- 1:34reinstarten noch ganz kurz die Anmerkung, Liebe Zuhörer, liebe
- 1:37Zuhörer, falls dir dieser Podcast gefällt, du den
- 1:40Abfeierst, ihn vielleicht schon länger hörst, so Mehrwert
- 1:42rausziehen kannst, schau doch mal in die Shownotes, da gibt es
- 1:45einen kleinen Spendenlink. Falls du Bock hast zu uns zu
- 1:47unterstützen, wir würden uns mega darüber freuen.
- 1:50Das nur kurz als Anmerkung. Werbung ändern an dem Punkt.
- 1:53Und deswegen fabi, Hau doch mal raus, was für ein Pattern kommt
- 1:58heute, wir haben es ja in der Einleitungsfolge schon mal etwas
- 2:02angeteasert und genau das haben wir auch jetzt gemacht.
- 2:05Wir haben gesagt, wir nehmen einfach ein Pattern, was ich
- 2:07glaube einfach wirklich, wirklich, wirklich oft einem
- 2:10über den Weg läuft und zwar das Factory Pattern und ich finde
- 2:14auch persönlich ist es auch ein. Pattern, was ich auch häufig
- 2:19sehe, häufig nutze also auch selber und ich finde irgendwie,
- 2:23das ist so ein Klassiker und deswegen können wir einfach mal
- 2:25mit diesem Klassiker einfach anfangen und durchstarten und
- 2:29einfach mal gucken okay ne, was ist das, wann nutzt man das,
- 2:33wofür benutzt man das? Und diese Fragen klären wir
- 2:36einfach mal alle und zeigen natürlich, was es also wie das
- 2:40aufgebaut ist, ne. Genau, also wir hatten ja
- 2:43gesagt, dass wir uns heute das Factory Pattern anschauen
- 2:45wollen. Und in der Einleitungsfolge sag
- 2:49ich mal, haben wir ja auch gesagt, warum Pattern so wichtig
- 2:52sind. Noch mal kurz genannt, um
- 2:54einfach Strukturen den Code zu kriegen, besser testbaren Code
- 2:57zu haben, Skalierbarer und Wartbarer zu sein und das kann
- 3:01man am Factory Pattern auch ganz gut schon sehen und deswegen ist
- 3:04es auch n super einstiegspattern sag ich mal, weil man kann es
- 3:08auch mit. Mit Analogien gut erklären und
- 3:10ich weiß, du bist Fan von Analogien.
- 3:12Fabi, da kannst du dich richtig austoben heute aber mal ganz
- 3:17kurz allgemein, warum überhaupt Factory pattern?
- 3:20Also wir bewegen uns heute so n bisschen in der
- 3:22objektorientierten Welt, das noch als Anmerkung dazu.
- 3:26Ja. Und jeder, der vielleicht gerade
- 3:29am Anfang ist, sich mit der Objektorientierung zu
- 3:32beschäftigen, beispielsweise mit Javas startet und da ja
- 3:37notgedrungen in die Objektorientierung kommt, was ja
- 3:40nichts Schlechtes ist. Nicht falsch verstehen, aber der
- 3:42wird das Halt merken, dass gerade am Anfang, dann hast du
- 3:45überall New im Code, überall werden Objekte erzeugt, du weißt
- 3:48gar nicht mehr, auf welchen du jetzt arbeiten sollst.
- 3:51Du hast ne hohe Kopplung des Codes, du kannst das nicht mehr
- 3:54so wirklich extrahierend voneinander und.
- 3:56Wie sagt man so schön Dead escalated Quickly?
- 4:00Also du kommst halt dann auch schnell an den Punkt, wo es
- 4:02einfach unübersichtlich wird und da möchte ich wirklich mal mit
- 4:07einer Analogie starten. Fabi, Ich hoffe du greifst die
- 4:09auf oder hast vielleicht noch ne andere damit man sich das Ganze
- 4:12einfach mal vorstellen kann wie man jetzt mit Hilfe eines
- 4:15Factory Patterns. Mehr Struktur in seinen Code
- 4:19bekommt. Und zwar möchte ich da, dass ihr
- 4:21euch alle, liebe Zuhörer, liebe Zuhörer, du und vor allem auch
- 4:24du Fabi euch folgendes vorstellt.
- 4:27Ihr seid beispielsweise wieder in der Schule oder an der Uni,
- 4:32ihr hattet eine anstrengende Vorlesung deswegen oder oder
- 4:38gerade Unterricht und ihr seid so richtig ausgelaugt und was
- 4:40wäre jetzt besser als ein kühles Getränk, weil es ist warm
- 4:43draußen ja, also du hast jetzt so richtig Bock auf ein kaltes
- 4:46Getränk und. Und dann steht er da, am Ende
- 4:48des Ganges, leuchtend der Getränkeautomat, und du rennst
- 4:53dahin mit deinen letzten Münzen in der Tasche und möchtest dir
- 4:56jetzt noch ein schönes kaltes Getränk holen und stehst davor
- 4:59und siehst die verschiedenen Knöpfe, weißt erst mal gar
- 5:02nicht, was du nehmen sollst. Nimmst du eine Cola, eine Cola
- 5:04light, ein Wasser, eine Apfelschorle vielleicht und eine
- 5:09Spezi gibt es auch für dich kein Problem, hat der Automat am
- 5:13Start und. Und ja, was passiert jetzt?
- 5:17Du schmeißt dein Geld rein und drückst einfach auf n Knopf und
- 5:21sagst zum Beispiel Wasser und du bekommst ne Wasserflasche
- 5:25daraus, vorzugsweise wahrscheinlich n halber Liter
- 5:28PET Flasche, aber du bekommst n Wasser.
- 5:32Hättest du jetzt Cola gedrückt, würde der Automat dir Cola
- 5:35geben. Das heißt abhängig davon, was du
- 5:38dem Automat als Eingabe gibst, kriegst du dementsprechend den
- 5:42Output. Ja, und das kann man sich jetzt
- 5:44wieso n neues Objekt getränkt vorstellen, nur das ist in dem
- 5:48Fall wenn ich Wasser drücke und Wasser ist wenn ich Cola drücke
- 5:50ist es ne Cola. Das heißt, in diesem Fall ist
- 5:54der Automat genau diese Factory und das Pattern, was wir heute
- 5:58besprechen wollen. Denn die Logik was du bekommst
- 6:01an Getränk, also als Getränk, ist quasi intern im Automat
- 6:06gegeben und abhängig von deiner Knopfeingabe sagen wir mal da
- 6:10drin ist ne Art Switch. Ja FLS wie auch immer.
- 6:15Wird entschieden, welches Getränk ausgegeben wird.
- 6:17Das heißt, für dich spielt es gar keine Rolle, wie intern
- 6:21ausgewählt wird. Es spielt für dich nicht mal
- 6:23eine Rolle, wie dieses Getränk da überhaupt rein gekommen ist.
- 6:25Dass das irgendwer aufgefüllt hat oder wie das Getränk
- 6:27abgefüllt wurde oder was auch immer es spielt für dich in dem
- 6:31Fall keine Rolle, sondern es spielt nur eine Rolle.
- 6:34Ich möchte jetzt auf Wasser drücken und dann möchte ich
- 6:36bitte auch ein Wasser bekommen, der Rest ist mir egal und.
- 6:39Und ich finde, daran kann man das schon mal ganz gut erklären
- 6:42oder beziehungsweise verstehen, was dieses Pattern eigentlich
- 6:45für n Ziel hat am Ende. Ja, also du kriegst ja im
- 6:48Endeffekt sozusagen ein, wenn man jetzt so n bisschen, weil du
- 6:50ja auf Switch und IF und so eingegangen bist.
- 6:52Du kriegst ja am Ende so so ne Art, ich sag mal Objekt Getränk.
- 6:56Und was es dann aber speziell für ein Getränk ist, das ist im
- 6:58Endeffekt erstmal, sage ich jetzt mal egal, weil das dieser
- 7:02Getränkeautomat kann nur Getränke ausspucken und dann ist
- 7:05es natürlich wichtig. Was ist es denn wirklich
- 7:06speziell für ein Getränk? Also wenn du jetzt zum Beispiel
- 7:09sagst Wasser ist dann zum Beispiel auf 1 und dann hast du
- 7:11zum Beispiel if Eingabe 1 dann Wasser if Eingabe oder Else IF
- 7:15oder so und so weiter und sofort oder mit dem Switch wie du
- 7:18meintest um sich das jetzt mal ganz explizit vorzustellen und
- 7:21dann kriegst du halt einfach dein dein Getränk da raus.
- 7:23Ja finde ich gut, ich finde das. Also ich hab hätt noch ne andere
- 7:27Analogie, vielleicht noch mal so n bisschen um die Vielfalt
- 7:31rauszubringen. Wenn wir jetzt schon bei Cola
- 7:34und und ungesunden Getränken waren, dann möchte ich jetzt
- 7:36noch n ungesundes Essen ansprechen.
- 7:38Oh, jetzt bin ich gespannt. Zum Beispiel Pizza, ne.
- 7:41Also wenn ihr jetzt zum Beispiel was.
- 7:43Ungesund. Ja, natürlich nicht.
- 7:46Pizza ist sehr gesund, sollte man jeden Tag essen, mindestens
- 7:503, mindestens 3, ja wenn nicht mehr, nein, auf jeden Fall, ich
- 7:56finde, daran kann man sich das auch oder kann ich mir das ganz
- 7:58gut vorstellen, wenn man sagt okay, du gehst in eine Pizzeria
- 8:01und möchtest jetzt eine Pizza bestellen und du weißt
- 8:04eigentlich okay egal welche Pizza du bestellst, du hast
- 8:08eigentlich immer den gleichen Pizzaboden, also der Teig von
- 8:11dem Boden ist immer der gleiche. Die Soße da drauf, die
- 8:15Tomatensoße auch immer die gleiche, ne so und dann ist
- 8:18natürlich nur die Frage OK, was möchtest du jetzt drauf haben?
- 8:22Ne du gehst jetzt zum Beispiel hin du sagst ich möchte ne
- 8:23Salamipizza bestellen, also bekommst du halt eben diese
- 8:26Grundpizza ne Teig und Tomatensoße plus dann Salami und
- 8:30Käse drauf ne oder du sagst ich möchte ne Hawaii Pizza haben und
- 8:34bekommst dann halt eben wieder diese Grundpizza mit halt
- 8:37Schinken und Ananas ich glaub so.
- 8:39Ungefähr geht nach Hawaii, bin ich jetzt nicht so Fan.
- 8:41Von Hawaii hast du doch nur gewählt, um jetzt hier Leute zu
- 8:44provozieren, die sagen Hawaii ist keine Pizza.
- 8:48Ja, mal gucken, finde ich gut, finde ich gut, gleich war so
- 8:52eine Grundsatzdiskussion jetzt hier ausbrechen lassen.
- 8:56Ja ich bin auch kein Fan von Hawaii muss ich sagen, aber ist
- 8:59ja Geschmackssache, Geschmackssache.
- 9:03Genau, aber im Endeffekt gehst du ja eigentlich dann am Ende
- 9:05aber auch nur hin und ne, also wenn du das ganze noch weiter
- 9:07abstrahierst, hast du ja in vielen Restaurants auch einfach
- 9:10nur zahlen, die dann zu mich dran stehen und sagst ja ich
- 9:13möchte jetzt die 10 ne und 10 ist dann am Ende beispielsweise
- 9:16die Salami ne und dann sagst du ich möchte aber zu mich die 14
- 9:19und das ist dann aber die die Hawaii und wichtig ist ja nur,
- 9:22dass du weißt, du möchtest eine Pizza Punkt 1 und Punkt 2 ist
- 9:27welche denn genau ne? Dann sagst du halt entweder den
- 9:31Namen oder die Zahl und bekommst dann halt eben am Ende diese
- 9:33Pizza. Und wie das jetzt aber
- 9:35hergestellt wird, wie du meintest ne keine Ahnung, du
- 9:38brauchst nicht wissen wie der Belag aussieht beziehungsweise
- 9:41wie der wie der da drauf gelegt wird, wie die Pizzateig Rezeptur
- 9:45ist, was in die Tomatensoße kommt alles egal.
- 9:48Das macht alles die Küche ne und wenn man das jetzt auf Code
- 9:52Ebene sieht, dann ist die Küche der Defactory und.
- 9:56Innerhalb der Factory weiß der Code, was da passieren soll,
- 9:59aber du von außen, wenn du die benutzt diese Factory die
- 10:02brauchst, da brauchst du es nicht wissen, du willst halt nur
- 10:04die entsprechenden Pits und so ne.
- 10:06Und. Das ist im Endeffekt dann ja
- 10:10auch eine andere Analogie für so n Factory patter ne.
- 10:14Ja, was man daran auch wirklich. Also es ist auch n sehr gute
- 10:17Analogie, vielen Dank dafür, fabi.
- 10:20Weil wir ein wichtiger Punkt der ne Factory auch noch mit sich
- 10:24bringt. Also das Pattern kann man daran
- 10:26nämlich auch ganz gut erklären. Angenommen jemand bestellt jetzt
- 10:29ne Salamipizza, fängst du ja nicht an zu sagen ich setze
- 10:34jetzt n Teig an, ich rühre jetzt die Soße an oder stell diese
- 10:38Soße quasi her, hab dann den Teig, die Soße und dann den
- 10:41spezifischen Belag für die Pizza drauf, ne um ne Salamipizza zum
- 10:45Beispiel herzustellen, sagen wir mal das machst du ja nicht in
- 10:49dem Fall, sondern du hast ja wie du meintest diese Grundsoße, die
- 10:52ist fertig für alle Pizzen, das heißt du kannst sie wieder
- 10:54verwenden und musst nicht jedes Mal neu definieren, wie diese
- 10:58Soße aussieht, welche Kräuter da reinkommen, wie auch immer,
- 11:01genauso der Teig, der ist fertig, das heißt du musst nicht
- 11:03jedes Mal wieder neuen Teig herstellen, nur um jetzt ne
- 11:06Salami oder was hast du gesagt ne Hawai Pizza zu machen.
- 11:09Ja und daran kann man nämlich auch gut erkennen welche
- 11:12Vorteile das mit sich bringt, weil du kannst ja sagen ich habe
- 11:15diese Grundpizza und die hat Eigenschaften.
- 11:17Ja, zum Beispiel der Teig sieht so und so aus, die Soße da drauf
- 11:20ist in der und der Menge da drauf und so weiter und darauf
- 11:24aufbauend spezifizierst du dann ja nur noch wie du meintest die
- 11:27Pizza und kannst so quasi Objekte schnell und einfach
- 11:32herstellen, in dem Fall die Pizza.
- 11:34Wenn wir jetzt noch mal n bisschen in die Coderichtung
- 11:35gehen, also quasi in deiner objektorientierung Objekte
- 11:38herstellen ohne zu wissen wie genau sie im Detail gebaut sind,
- 11:42wie der Teig aussieht, wie die Soße aussieht, aber du weißt du
- 11:44kriegst ne Pizza. Plus die Parameter, die du
- 11:47reingibst Salami oder Hawaii oder ne Nummer wie du meintest
- 11:50und hast dann am Ende n fertiges Pizzaobjekt, was deinen
- 11:55Ansprüchen entspricht, sag ich mal.
- 11:57Der Code liefert es dir einfach ne und das ist eigentlich
- 12:01wirklich ne perfekte Analogie um einfach mal.
- 12:05Den Factory Pattern zu zeigen, also quasi auch diese Analogie
- 12:08mal zu programmieren, einfach sich zu sagen, ich habe jetzt
- 12:12ein eine basisklasse Pizza und habe dann spezifische Pizzen
- 12:17sozusagen die ich erzeugen kann, also alle, die jetzt diese Folge
- 12:21hören und das mal ausprobieren wollen, programmiert ruhig
- 12:24danach mal. Diese Pizzeria ist eine sehr
- 12:26geile Übung. Was ich ein bisschen, also was,
- 12:29was mich früher am beim Start in die Softwareentwicklung, was
- 12:33mich immer so. Ein bisschen verwundert hat an
- 12:35diesem, an dieser Beschreibung von einer Factory, das das
- 12:40heißt, die Factory gibt ja ein Objekt und wie dieses Objekt am
- 12:45Ende gebaut wird, das ist dir egal, das brauchst du nicht
- 12:49wissen, das wird von der Factory bereitgestellt, das Macht der
- 12:52Code dahinter und du brauchst das Wissen darüber nicht und das
- 12:56fand ich da dachte ich mal so, ich verstehe es nicht ganz am
- 12:59Anfang, da dachte ich mir, so wie ich bau.
- 13:02Bau doch diese Factory, dann weiß ich doch wie das
- 13:04funktioniert. So weißt du da dachte ich mir
- 13:06immer so, das macht doch gar keinen Sinn.
- 13:07Natürlich weiß ich wie das da drin aussieht, natürlich muss
- 13:10ich wissen wie das passiert und das war für mich damals immer so
- 13:13ein kleiner wie sagt man so, da habe ich mir so ein bisschen den
- 13:17Kopf drüber zerbrochen, im Endeffekt ist es ja so, dass
- 13:21wenn du normalerweise später irgendwann mal in der
- 13:25Softwareentwicklung arbeitest, dann.
- 13:26Dann schreibst du ja nicht den kompletten Code für die gesamte
- 13:29Anwendung. Das heißt, du schreibst
- 13:31vielleicht an einer Stelle und jemand anders schreibt an einer
- 13:33anderen Stelle, das heißt, eine Person hat beispielsweise diese
- 13:37diese Factory erstellt und du kannst sie dann für deine
- 13:41Aufgabe nutzen. Und in dem Fall ist es dann so,
- 13:44dass du natürlich darauf vertrauen solltest, dass die
- 13:46Factory funktioniert. Ist ja auch deine
- 13:48Arbeitskollegin oder dein Arbeitskollege, der das dann
- 13:51implementiert hat, aber du kannst dann einfach nur sagen,
- 13:53OK, ich möchte jetzt Objekt AB oder C haben und das kriege ich
- 13:56aus der Factory raus, ne und das ist halt so n bisschen das war
- 14:02ich weiß nicht ob noch irgendjemand vielleicht genauso
- 14:04mal an diesem Punkt war, aber das das hat mich früher.
- 14:09Gerade im Studium habe ich das immer.
- 14:10Ich dachte, was wollen die denn von mir.
- 14:12Natürlich weiß ich, wie das alles aussieht, ich habe es ja
- 14:14programmiert. Dann, ja, natürlich ist damit ja
- 14:19nicht gemeint, dass du eine Blackbox hast.
- 14:21Also gerade wenn du sie selbst entwickelst, also das Pattern
- 14:24selbst implementierst, geht es ja nicht darum, eine Blackbox zu
- 14:26haben, wo du nicht in den Code reingucken kannst.
- 14:28Aber um die Wiederverwendbarkeit und Skalierbarkeit, das ist ja
- 14:31das Entscheidende, dass du genau diese Factory an einer Stelle
- 14:35definierst. Und dann das Hochskalieren
- 14:38kannst, indem du dir halt verschiedene Implementierung
- 14:41einer Pizza überlegst oder implementierst und die dann halt
- 14:45wieder verwenden kannst. Über deine Factory und das
- 14:48Entschlankt oder macht ja den Code schlank am Ende
- 14:52unvorinkalierbar. Ja, genau.
- 14:55Aber es gibt halt auch, um mal ein bisschen fachlicher zu
- 14:58werden und so mal richtig in das Design Pattern reinzukommen.
- 15:02Es gibt ja verschiedene Formen des Factory Patterns, es gibt
- 15:05sozusagen so eine vereinfachte Factory, es gibt die klassische,
- 15:09was auch als Design Pattern so quasi in jedem Buch zu finden
- 15:12ist. Und es gibt noch darauf
- 15:14aufbauend eine erweiterte Form und die 3 würde ich gerne mal
- 15:18jetzt der Reihe nach mit dir besprechen und.
- 15:21Um einfach n guten Überblick zu geben und halt auch immer so n
- 15:23bisschen vor und Nachteile und Use Cases zu nennen.
- 15:26Und ich glaube dann haben wir hier im.
- 15:29Vorfeld bevor wir jetzt wirklich in diese 3 Punkte einsteigen,
- 15:33würde ich vielleicht noch mal ganz kurz n kleinen mini Exkurs
- 15:35machen. Nur falls weil ich es könnte
- 15:38sein, dass 2 bestimmte Begriffe fallen innerhalb dieser, wenn
- 15:41wir das jetzt durchgehen. Und zwar einmal Interface, also
- 15:45Schnittstelle und abstrakte Klasse, weil wir sind ja jetzt
- 15:48wie wie du schon meintest, in Objektorientierungsebene und
- 15:52damit man einmal vielleicht noch mal ganz kurz diesen ne, dass
- 15:57man dann vielleicht noch mal alle abholt, bei denen es
- 15:59vielleicht mal so n bisschen ins Grübeln kommt, so was war noch
- 16:03mal ne Schnittstelle und das würde ich einmal ganz kurz noch
- 16:05mal sagen und dann können wir direkt reinstarten also n
- 16:09Interface ist im Endeffekt ja nichts anderes als eine.
- 16:12Sammlung von Methodendeklaration also, dass du sagst, OK, du hast
- 16:15jetzt zum Beispiel bei, wenn wir jetzt bei der Pizza sind bei
- 16:20dieser ne, wenn wir jetzt von diesem Pizzabeispiel ausgehen,
- 16:23dass du einfach sagst sowas wie mach Soße drauf, das ist eine
- 16:27Funktion wo also ne die die da zum Beispiel irgendwie sinnvoll
- 16:31wäre, weil du musst ja irgendwie Soße drauf machen, ne als
- 16:33Beispiel und dann hast du vielleicht noch andere, aber du
- 16:37hast im Endeffekt nur diese leeren Hüllen von Methoden, die
- 16:41einfach so. Für jede Pizza angewandt werden
- 16:44müssen und die dann aber für jede Pizza selbst implementiert
- 16:49werden müssen. Also du sagst nur, das muss
- 16:51passieren bei der Pizza, also du musst auf jeden Fall Soße drauf
- 16:54tun, wie genau ist bei dem Interface nicht festgelegt, das
- 16:59heißt du hast im Endeffekt nur du weißt nur was passieren soll,
- 17:02aber du weißt nicht genau was passieren soll.
- 17:06Also im Einzelnen. Und wenn du jetzt sagst, du hast
- 17:08eine abstrakte Klasse, das ist ja ein bisschen ähnlich, kannst
- 17:11du ähnlich verwenden, nur dass eine abstrakte Klasse zwar auch
- 17:15sowas haben kann, wieso eine abstrakte Methode wo du sagst
- 17:19okay es gibt keine Implementierung dafür, aber es
- 17:20muss implementiert werden in der entsprechenden Klasse, aber es
- 17:24gibt auch konkrete Methoden, also wo wirklich eine
- 17:27Implementierung drin ist. Und wenn du jetzt zum Beispiel
- 17:29das Gleiche mit einer Pizza machst kannst.
- 17:31Könntest du zum Beispiel sagen, wenn du dieses Interface Pizza
- 17:34hast, wo du sagst paktros Soße drauf, dann müsstest du, wenn du
- 17:372 verschiedene Pizzen implementiert, also
- 17:39implementierst müsstest du bei jeder Pizza sagen okay pack mal
- 17:44bitte Soße drauf, zum Beispiel eine Kelle und bei der anderen
- 17:47zum Beispiel auch eine Kelle oder 2.
- 17:49Wenn es mehr oder weniger sein soll, wenn du eine abstrakte
- 17:52Klasse nimmst und dieses in dieser abstrakten Klasse, dass
- 17:55die Methode packsoße drauf hast, dann.
- 17:57Dann könntest du immer festlegen, weil wir auch vorhin
- 18:00meinten, es ist immer die gleiche Menge.
- 18:02Sagst du dort einfach, mach mal eine Kelle Soße drauf in dieser
- 18:05Methode und dann kann quasi eine Salami Pizza kann dann im
- 18:10Endeffekt eine Pizza sein und je nachdem ob es dann ein Interface
- 18:15ist oder eine abstrakte Klasse, von der ich sag mal die
- 18:20entsprechende spezifische Pizza ableitet oder erbt.
- 18:24Hast du dann sozusagen die Möglichkeiten zu sagen, OK, muss
- 18:26ich das immer selbst implementieren oder ist es
- 18:29vielleicht schon an der einen oder anderen Stelle schon
- 18:31vorimplementiert? Ja, also den Unterschied
- 18:35zwischen Interface und der abstrakten Klasse sehen wir dann
- 18:38auch in den Factory Pattern auch noch mal genau explizit sag ich
- 18:41mal, weil das ist nämlich genau der Unterschied zwischen so
- 18:43einer einfachen Factory und sag ich mal dem offiziellen Factory
- 18:46Pattern. Ja, aber ja, es ist natürlich
- 18:49ein wichtiger Unterschied und auch nicht so trivial, aber.
- 18:52Also für also wenn man selbst halt manchmal so denkt, ja, ist
- 18:56ja klar was n Interface ist, was ne abstrakte Klasse ist.
- 18:58Nein, so klar ist das nicht gerade am Anfang nicht.
- 19:00Deswegen gut, dass du es noch mal erwähnt hast.
- 19:02Und ich weiß nicht, wie es bei dir ist.
- 19:04Jedes Mal, wenn ich drüber nachdenke, muss ich auch erstmal
- 19:07wieder drüber nachdenken. Also es kommt nicht so wie aus
- 19:09der Pistole geschossen, dass ich sage ja, hier das und das,
- 19:11sondern erstmal noch mal kurz im Kopf differenzieren und dann
- 19:14quasi versuchen zu erläutern, das ist nämlich gar nicht so
- 19:17trivial am Ende. Ich find was man sich auf jeden
- 19:19Fall merken kann ist n Interface, da steckt niemals
- 19:21Logik drin. Es sagt immer nur, was muss
- 19:24passieren, aber nicht, wie es passieren muss.
- 19:26Und bei einer abstrakten Klasse kannst du beides machen.
- 19:28Du kannst einmal auf der einen Seite sagen, OK, was muss
- 19:30passieren und du kannst aber auch noch zusätzlich sagen, wie
- 19:33soll es denn genau konkret passieren, so das ist so n
- 19:36bisschen das eigentlich das was man damit machen kann.
- 19:39Also ich würde sagen ne abstrakte Klasse ist halt
- 19:40mächtiger als n Interface. Ja genau, also in Interface kann
- 19:44man sich halt merken, ist halt so ne Art Vereinbarung, sagen
- 19:47wir es mal so, also es ist halt ne Definition.
- 19:49Damit beide Seiten, die das verwenden, also der es erzeugt
- 19:53und der es verwenden möchte, weiß, was drin sein wird.
- 19:57So ne OK, aber dann lass uns direkt mal mit dem ersten Anfang
- 20:01und zwar mit der simple Factory, weil da kommen jetzt auch
- 20:04genauso die Interfaces zum Einsatz.
- 20:07Also wie gesagt noch mal die Anmerkung, Es ist kein
- 20:09offizielles Pattern, aber es ist sehr verbreitet und gerade am.
- 20:14Anfang eines Projekts sehr einsteigerfreundlich, wenn man
- 20:17so schon mal n bisschen was strukturieren will, aber
- 20:19vielleicht noch nicht so ne Riesenkomplexität drin hat, dass
- 20:23es nicht mehr ausreicht. Deswegen ist es eigentlich immer
- 20:25n ganz guter Start damit anzufangen und man kann sich das
- 20:28so vorstellen, dass man jetzt dieses simple Factory hat, also
- 20:31eine zentrale Klasse. Die eine Methode bereitstellt
- 20:35beispielsweise eine Create mit einem Eingabeparameter, also zum
- 20:38Beispiel, wie wir bei der Pizzeria hatten, zu sagen, man
- 20:41kippt noch rein, welche Pizza ja zum Beispiel als String kann man
- 20:46ja machen. Ja, wenn du jetzt einfach sagen
- 20:47möchtest Salami oder oder ne Nummer vom vom vom vom Menü
- 20:52sozusagen und daran wird dann quasi entschieden was erzeugt
- 20:57wird, das heißt diese Create gibt dir dann am Ende dein
- 20:59Objekt zurück, was du haben möchtest, oder?
- 21:03N anderer, n anderes Beispiel ne, was ich auch schon oft
- 21:07gelesen hab und das macht auch Sinn, wenn du dir jetzt so zum
- 21:10Beispiel vorstellst, du gehst Fastfood essen, ja du gehst
- 21:13jetzt zu mcdonald's zum Beispiel, dann stellst du dich
- 21:15ja auch an die Kasse und sagst ich hätt gern n Cheeseburger so
- 21:19das wird aufgenommen. Der Satz Ich hätte gerne einen
- 21:22Cheeseburger ist klar, die Küche weiß, was zu tun ist.
- 21:25Ja, zum Beispiel jetzt und so. Factory mcdonald's Kitchen ruft
- 21:29die Create auf und sagt Cheeseburger so, dann geht es in
- 21:32der Küche zur Sache. Dieser Cheeseburger wird
- 21:34hergestellt und zwar ist es und jetzt kommt ein Interface, ganz
- 21:38klar wie n Cheeseburger auszusehen hat.
- 21:40Ja also dieses Interface wurde für den Cheeseburger
- 21:43implementiert, das heißt Brötchen keine Ahnung Patty.
- 21:46Was kommt da? Kommt da überhaupt noch ne Gurke
- 21:48drauf, keine Ahnung, klar das war da glaub ich noch nie drauf.
- 21:52Nee, OK. Ja, Käse klar, Käse Käse wär gut
- 21:55beim Cheeseburger. Ich hoffe, dass da Käse drauf
- 21:58ist. Weißt du zugeklappt eingepackt
- 21:59raus, du kriegst das und hast deinen wunderbaren Cheeseburger.
- 22:03Vorteil an dieser Implementierung ist, dass es
- 22:07halt schnell, einfach und übersichtlich erstmal ist.
- 22:09Ne, weil du hast dann diese eine Funktion und du kannst dir
- 22:13tausende Cheeseburger erstellen, damit ne du sagst ihn immer
- 22:15wieder. Das hatte ich gerade gesagt.
- 22:18Ja, mcdonald's Kitchen Punkt create gibt es Cheeseburger als
- 22:21Parameter rein und du kriegst n Cheeseburger so der Nachteil ist
- 22:26ist genau das was du nämlich jetzt gerade gesagt hast.
- 22:28Aber jetzt möchte ich aber n normalen Hamburger jetzt möchte
- 22:30ich oh Mann jetzt komm ich ins Schwimmen was gibt es bei
- 22:33mcdonald's? Ja super super Mcchicken oder
- 22:36wie die heißen ja also es gibt halt ziemlich viele Burger.
- 22:40So, und da kommt nämlich dann der Nachteil, weil wir auch bei
- 22:43den Getränkeautomaten meinten, man kann das ja zum Beispiel mit
- 22:45einem Switch machen, nur dann kommst du halt relativ schnell
- 22:49bei steigender Komplexität in die Switch.
- 22:52Hölle also weil du einfach alle Fälle.
- 22:55Sauber unterscheiden musst, weil du ja immer explizit diesen
- 22:58einen Burger rausgibst und dieser eine Burger implementiert
- 23:02quasi deine Schnittstelle wie es aussehen soll und definiert.
- 23:05Das ist n Cheeseburger, das ist NN Big Mac gibt es n Big Mac so
- 23:09Big Mac oder oder oder n Chicken Burger oder so ne ich find das
- 23:14heißt. Ich muss das jeden type erkennen
- 23:16ne also ich find es gut, dass du sagst auch es gibt n Burger
- 23:18raus, weil am Ende sagst du ja ne irgendwie die Küche.
- 23:22Create und dann zum Beispiel Cheeseburger, Hamburger oder was
- 23:25auch immer. Was am Ende rauskommt ist ja ein
- 23:28Burger, ne, du sagst ja du kriegst einen Burger und was
- 23:33aber quasi der also du kriegst n Cheeseburger oder n Hamburger
- 23:37der aber im Kern n Burger ist ne und wenn wir jetzt zum Beispiel
- 23:39davon ausgehen, dass wir dann am Ende n Interface, also Burger
- 23:42ist n Interface und du kannst halt sagen ja OK, der
- 23:45Cheeseburger muss halt alle Methoden vom vom Burger quasi
- 23:50implementieren. So, das heißt du weißt auf jeden
- 23:52Fall auf einen Cheeseburger kommt, also dafür brauchst du
- 23:56Brötchen, dafür brauchst du ein Patty, dafür brauchst du Soße
- 24:00zum Beispiel und das ist bei einem Hamburger genauso.
- 24:02Du brauchst auf jeden Fall auch wieder ein, also ein Brötchen
- 24:06und du brauchst auch wieder ein Patty und du brauchst auch Soße,
- 24:09es ist vielleicht was anderes je nach Burger und das ist halt
- 24:13genau dann sozusagen. Dass du zwar sagst, OK, das muss
- 24:15alles da sein, aber es muss einzeln implementiert werden in
- 24:19den entsprechenden expliziten Klassen dann ne, also der
- 24:24Cheeseburger weiß nur was passieren muss, aber wie genau,
- 24:27das musst du im Cheeseburger festlegen.
- 24:29So ne genau. Und da haben wir nämlich genau
- 24:32das Problem. Wenn du jetzt sehr viele Burger
- 24:34hast. Ja, also ich find das mcdonald's
- 24:35Beispiel ist gar nicht so schlecht, weil das kann man sich
- 24:37auch gut vorstellen, weil es noch n bisschen komplexer ist
- 24:40als ne Pizza sag ich mal. Also komplexer im Sinne von der
- 24:42Variantenvielfalt. Wenn du jetzt nämlich wirklich
- 24:46grundverschiedene Burger hast und du gehst, aber das mit so
- 24:49einem simple Factory Pattern Ansatz so wirklich ganz simpel
- 24:53gehalten mit einfach so einer create Methode, ja dann hast du
- 24:56halt das Ding, dass du wie du meintest, das Interface immer
- 24:58neu implementieren musst. Ne, wie wird dieser Burger
- 25:01hergestellt? Na ja, ich brauch das Brötchen
- 25:03OK ich hol mir das Brötchen. Was brauch ich jetzt für n
- 25:05Patty? Ja, Chicken Beef gibt es noch
- 25:07was drittes? Nee ich glaub die beiden so, da
- 25:10musst du da schon mal entscheiden ne und das muss ja
- 25:11jeder Bürger für sich implementieren, damit der am
- 25:13Ende dem entspricht wie er gedacht ist.
- 25:15Sozusagen ne richtig und da merkt man schon das ist doch
- 25:19viel doppelte Arbeit, ja. Wieso soll ich komplett neu
- 25:24definieren, wie n Cheeseburger aussieht?
- 25:25Wenn n. Hier gibt es doch auch so mit
- 25:28Jalapenos so ne Chili cheese sag ich mal ne wenn der doch
- 25:32eigentlich der gleiche Burger also geh ich jetzt mal von aus
- 25:34der gleiche Burger ist nur, dass du nur noch n paar kleine
- 25:36Jalapenos da drauf legst. Weißt du da muss ich das doch
- 25:39nicht komplett neu definieren, wenn das der der gleiche Burger
- 25:42eigentlich im Kern ist. So und da merkt man schon hm.
- 25:45Das skaliert doch nicht. Also wenn ich jetzt wirklich ne
- 25:47riesen burgerkarte hab, das wird nicht skalieren so ne und da ist
- 25:51nämlich dann auch der Nachteil bei der Simple Factory, dass man
- 25:54sagen kann, bei wenig Variantenvielfalt ist es schnell
- 25:58und einsteigerfreundlich implementiert und ausreichend
- 26:00völlig okay zu starten, weil Stichwort refactoring wenn du
- 26:05merkst, ah nee, irgendwie mill ich meinen Code jetzt doch zu,
- 26:08also das ist jetzt anstrengend, da diese ganzen Cases zu
- 26:11unterscheiden, dann kann ich ja immer noch.
- 26:14Refactan und vielleicht auf das eigentliche Factory Pattern
- 26:18kommen und das würde ich jetzt gerne mit dir besprechen, um
- 26:21einfach auch da mal den Unterschied zu zeigen und
- 26:23welchen Mehrwert es bringt, auch wenn es natürlich Anmerkung
- 26:27nicht ganz so einsteigerfreundlich ist, weil
- 26:29es einfach ein bisschen mehr Aufwand hat.
- 26:31Ja, also bisschen mehr Overhead an Code hat am Anfang ja ja auf.
- 26:35Jeden Fall. Also wenn ich jetzt zum Beispiel
- 26:37dieses Factory pattern, so wie es vielleicht dann auch
- 26:41angedacht ist, nehme. Würde ich einmal kurz vielleicht
- 26:46direkt den Unterschied zum zum simple Pattern mit dem Burgern
- 26:49darstellen? Ne, weil wenn du dir jetzt zum
- 26:51Beispiel überlegst, du hast in in diesem Burger, den du haben
- 26:55möchtest, du meintest ja Cheeseburger und Chili
- 26:57Cheeseburger ne, also es klingt ja schon fast gleich und bei dem
- 27:02wenn wir jetzt noch mal dieses dieses Beispiel mit dem
- 27:04Interface haben, dann steht ja in in dem Interface drin, du
- 27:08brauchst ein Brötchen. So, und dieses Brötchen musst du
- 27:11ja dann sozusagen im Cheeseburger definieren.
- 27:13Also ne, du brauchst ein Brötchen, musst du da in ne
- 27:16Logik reinpacken wie zum Beispiel Return?
- 27:20Weiß nicht simple Bun oder so ne, also ein ganz normales
- 27:22Brötchen und das gleich diesen gleichen, exakt gleichen Code
- 27:26musst du ja noch mal im Chili Cheeseburger definieren, das
- 27:29heißt du hast ja eigentlich quasi ne Code dopplung, die du
- 27:32eigentlich nicht doppelt brauchst.
- 27:33So und das bringt aber nun mal jetzt sozusagen so ein Interface
- 27:36mit sich, wenn du sozusagen ne Factory über so ein Interface
- 27:40nutzt, ne? So ein simple Factory.
- 27:43Wenn du jetzt aber wirklich diese diese Factory patter
- 27:46nimmst und sagst an der Stelle okay wir nehmen jetzt aber eine
- 27:49abstrakte Klasse an dieser Stelle, dann können wir bei
- 27:53einem sagen du hast einen Chili Cheeseburger und du hast einen
- 27:56Cheeseburger und das Ganze hat eine abstrakte Klasse, von der
- 28:00geerbt wird sozusagen, die ist einfach ein Burger und dieser
- 28:05Burger hat nimm ein Brötchen und ich.
- 28:09In dieser Burger Klasse, in dieser abstrakten Klasse ist
- 28:12schon definiert, dass du für deinen Burger, für die also
- 28:16einmal den Cheeseburger und den Chili Cheeseburger jeweils das
- 28:19normale oder das einfache Brötchen nimmst.
- 28:21Und damit hast du diese Implementierung schon in der
- 28:24abstrakten Klasse drin und musst es nicht zweimal im Cheeseburger
- 28:28und im Chili Cheeseburger sozusagen implementieren.
- 28:31Und das hilft dann halt sozusagen bestimmte.
- 28:35Eigenschaften schon zusammenzufassen, um halt eben
- 28:37diese Codeduplikation zu vermeiden.
- 28:40Wie du meintest, weil stell dir vor, du hast n burgerrestaurant,
- 28:44ne was du jetzt in in weiß ich irgendwie programmierst in einem
- 28:47Game oder so wo immer der Gleiche es sind immer nur die
- 28:51gleichen Burgerbrötchen ne du hast niemals andere
- 28:53burgerbrötchen, da macht es keinen Sinn.
- 28:55In 20 Bürgern beispielsweise wirklich 20 mal den gleichen
- 28:59Code zu machen. Ich mein, da kommt man ja
- 29:00relativ schnell hin und denkt sich so okay irgendwie müsste
- 29:02ich das ja vielleicht vereinheitlichen können.
- 29:04Genau, nimm ne abstrakte Klasse und kein Interface an der Stelle
- 29:08um das jetzt mal so direkt im Vergleich zu sehen, ne.
- 29:12Genau. Und dann dann quasi alle, die
- 29:14dann so richtig auf Vererbungen in der Objektorientierung
- 29:17stehen, die können das natürlich bis auf die Spitze treiben, dass
- 29:19du sagst, ich hab ne klasse Burger, die ist abstrakt, ne und
- 29:22dann gibt es n Cheeseburger und den kann ich auch noch mal
- 29:25weiter vererben zum Chili Cheeseburger, der eigentlich nur
- 29:28n Cheeseburger ist, wo ich am Ende halt wie gesagt noch
- 29:30lalapenos drauf mache oder irgendeinen anderen Burger, wo
- 29:33auf einmal Salat und Tomate drauf ist oder irgendwie so.
- 29:35Also du kannst das ja immer weiter Kapseln sozusagen und das
- 29:40Factory Pattern dann halt so richtig ins Spiel bringen, sag
- 29:43ich mal. Aber ich find n anderes
- 29:45Gedankenspiel dabei auch noch gut, um sich das noch mal
- 29:48vorzustellen, wofür so n Factory Pattern auch gut ist.
- 29:51Wir haben ja jetzt gesagt, du hast n burgerladen ja,
- 29:55mcdonald's als Beispiel, jetzt ist mcdonald's vielleicht sehr
- 30:00standardisiert. Länderübergreifend, so wie ich
- 30:03es jedenfalls kenne. Also wahrscheinlich wird es
- 30:05schon Unterschiede geben, auch wahrscheinlich in den, es ist ja
- 30:07irgendwo n Franchise am Ende, das heißt du hast wahrscheinlich
- 30:09auch n bisschen andere Karten oder Aktionen whatever aber es
- 30:12ist schon so standardisiert, dass ich glaub ich würd ich
- 30:15jetzt mal sagen, so n cheeseburger.
- 30:17In fast jedem Land gleich ist ne.
- 30:19Das heißt, das wäre ja auch wieder so n bisschen Richtung
- 30:22Simple Factory, auch wenn es halt wie gesagt zu viele
- 30:25verschiedene Burger gibt, aber da würde das ja noch so halbwegs
- 30:27funktionieren zu sagen, Hey Cheeseburger ist doch immer
- 30:30gleich, ja brauch ich es auch wirklich nur einmal machen, aber
- 30:33wenn man das n bisschen allgemeiner formuliert und ich
- 30:35hab jetzt einfach n Burger ne Burger Kette oder n Burger laden
- 30:40ne wo ich einfach gut Burger essen gehen kann ja dann sieht
- 30:43ja dieser Laden oder? Sagen wir mal so, ich möchte
- 30:48einfach einen Burger bestellen und ich gehe jetzt in
- 30:50verschiedenen Ländern in einen entsprechenden Laden und kaufe
- 30:54mir einen Burger, dann sieht er ja natürlich beispielsweise im
- 30:58asiatischen Raum anders aus als im in der USA zum Beispiel ja,
- 31:02in der USA ist die Wahrscheinlichkeit ja schon
- 31:04groß, sowas Big Mac Artiges zu bekommen.
- 31:08In im asiatischen Raum wahrscheinlich eher irgendwas
- 31:11asiatisch angehauchtes, ja vielleicht irgendwie so mit
- 31:14tiriyaki Soße in Japan oder so. Keine Ahnung, was geiles halt so
- 31:17ne, aber am Ende sind beides Burger, sind aber grundlegend
- 31:21verschieden. Also wie willst du jetzt
- 31:23anfangen mit einer simple Factory das alles abzubilden?
- 31:26Das heißt da kommst du halt jetzt zu den offiziellen Pattern
- 31:29zu sagen es gibt ne abstrakte Burgerklasse ne es gibt
- 31:32Grundeigenschaften eines Burgers, aber je nach Land.
- 31:36Sind die Spezifikationen obendrauf anders?
- 31:39Ja, für diesen Burgerladen, das heißt, meine Factory ändert sich
- 31:42dementsprechend auch oder die Burger, die ich damit erstellen
- 31:45kann, dass ich zum Beispiel sagen kann, hey, ich hab ne
- 31:48Factory und ich möchte jetzt n Burger und ich bin in Japan zum
- 31:52Beispiel und dann kriegst du halt deinen teriyaki Burger, ja
- 31:54oder ich sag, ich bin jetzt in der USA und Du kriegst halt n
- 31:57Big Mac so aber unter der Haube sind das abstrakte Burger, die
- 32:01selbst implementieren zum Beispiel deine Big Mac Klasse
- 32:05Teriyaki Burger Klasse. Ich hab keinen besseren Namen,
- 32:08sorry, und da hast du jetzt den Vorteil, dass die eigentliche
- 32:12Erstellung ja wie das Objekt am Ende aussieht, dann in deinen
- 32:16Subklassen ist. Das heißt, die Factory hat jetzt
- 32:19nicht mehr die Logik sowas wie OK, das Interface ich returne
- 32:25jetzt das Interface mit den und den Funktionen oder den und den
- 32:27Werten ja, sondern ich geb jetzt ne Subklasse zurück wie Big Mac
- 32:32Burger. Ja, weil die Factory wurde jetzt
- 32:36aufgerufen, mit Burger in der USA, Mhm so und dann geb ich ne
- 32:40Big Mac Klasse zurück und die Klasse selbst definiert jetzt
- 32:43wie der Burger ist und nach außen ist es dann halt wirklich
- 32:45nur noch dieser abstrakte Burger.
- 32:47Erstmal ja so und das ist halt der große Vorteil, dass du halt
- 32:51so komplexe Abläufe damit dann auch implementieren kannst.
- 32:56Zum Beispiel sowas wie. Länderabhängig Länderabhängig
- 33:00ist, weißt du ja. Ich meine, das ist ja, wenn man
- 33:04sich das zum Beispiel noch mal im Vergleich vorstellt, und du
- 33:06hast jetzt ein bisschen ein leicht abstrakteres Beispiel, du
- 33:11hast jetzt zum Beispiel ein Interface, ne, weil du ja
- 33:13meintest, das macht damit nicht so viel Sinn und stell dir vor,
- 33:16du hast am Ende ein Interface, wo alle Objekte eigentlich nur
- 33:20eine Methode teilen, die sie auf jeden Fall alle haben, und dann
- 33:23aber zum Beispiel Objekt 1, ne, was du instanzieren möchtest.
- 33:27Hat dann aber 5 Funktionen von der von dem Interface noch und
- 33:33klasse 2 noch mal 5 andere. Das heißt du hast in deiner in
- 33:36deinem Interface 11 Funktionen, aber für die eine Klasse
- 33:39brauchst du eigentlich nur die Hälfte und für die andere auch n
- 33:42bisschen mehr als die Hälfte. Du hast also ne minimale
- 33:45Schnittmenge und denkst dir so, warum hab ich eigentlich n
- 33:47Interface mit so vielen Funktionen die ich aber am Ende
- 33:50gar nicht implementieren muss? Also du musst sie quasi
- 33:53implementieren, was sind leerimplementierungen dann und?
- 33:56Und du denkst ja so, die brauch ich da ja gar nicht drin.
- 33:58Ne und das macht es dann an der Stelle irgendwann einfach nicht
- 34:01mehr sinnvoll, sozusagen so n simple Factory Pattern zu
- 34:04verwenden, sondern dann halt eben dieses Standard Factory
- 34:06Pattern zu nutzen. Ne und ich find das ja, wenn wir
- 34:11jetzt das Ganze noch mal vielleicht n bisschen
- 34:12technischer erklären, weil mir bringt das manchmal auch
- 34:17irgendwie was, wenn ich mir dann denke so OK, ja gut, wann
- 34:20implementier ich denn jetzt mal ne ne Burger factory, weißt du?
- 34:25So, wo wird denn das? Überhaupt, ich hab jetzt genug
- 34:27über Burger geredet, ich hab erstmal Hunger, nur Pause ein.
- 34:33Aber zum Beispiel, wenn man jetzt sagt, du hast einen.
- 34:36Ich bestell auch Grad nebenbei. Was willst du auch was?
- 34:39Ja komm. N.
- 34:40Cheeseburger und n Chili cheese würde ich gerne lesen.
- 34:44Wenn du jetzt aber pass auf wenn du jetzt sagst du hast ne UI
- 34:47oder so ne und du sagst ich möchte jetzt du hast ne Factory
- 34:51wie wie du sie gerade beschrieben hast.
- 34:54Mit einem Button so und dann möchtest du einfach nur zum
- 34:57Beispiel einen Button haben und jetzt ist aber die Frage, auf
- 35:01welchem Betriebssystem hältst du dich denn gerade auf, weil jeder
- 35:05weiß das ja, dass zum Beispiel auf einem Mac das Ganze
- 35:08vielleicht ein bisschen anders aussieht als auf einem Windows
- 35:11PC, die UI oder vielleicht auch bei einem Linux oder?
- 35:14Und damit du dann aber im Endeffekt sagst, ich möchte nur
- 35:17diesen Button, aber unabhängig davon, also ich möchte ja gar
- 35:20nicht, mir ist es egal welche auf welchem Betriebssystem ich
- 35:23mich befinde, diese Factory soll mir einfach den richtigen Button
- 35:27zurückgeben, den ich dann einfach meine UI einsetzen kann.
- 35:31Ja, das ist ein gutes Beispiel, weil ja der Button unabhängig
- 35:35vom Betriebssystem am Ende die gleiche Funktion haben wird oder
- 35:39die gleichen Fähigkeiten. Attribute nenn ich es mal ne.
- 35:43Aber ich natürlich im Betriebssystem Style bleiben
- 35:47möchte. Gerade wenn ich jetzt so Cross
- 35:48Plattformen entwickle. Ja und ich sage, ich habe jetzt
- 35:50zum Beispiel ne Desktop application und ich möchte die
- 35:52aber auf eingängigen Betriebssystem anbieten können,
- 35:55dann macht es natürlich Sinn wie du gerade meintest erstmal zu
- 35:58gucken auf welchem Betriebssystem läuft diese
- 36:01Anwendung und dementsprechend Style ich sie oder baue sie wie
- 36:05auch immer an welchem Step wir jetzt sind ja und?
- 36:08Das ist halt n cooles Beispiel, weil unter der Haube ist es ja
- 36:11der gleiche Button. Am Ende ne, der hat dann zum
- 36:13Beispiel irgendein Callback, wenn du ihn drückst der
- 36:15implementiert werden kann und das hat ja bei allen
- 36:17Betriebssystemen nur dass er halt vielleicht vom Styling
- 36:19anders aussieht. Richtig.
- 36:20Und dann hast du sozusagen das Styling, ist unterschiedlich in
- 36:23den eigenen Klassen, aber dieser Callback, wie du ihn zum
- 36:25Beispiel gerade genannt hast, oder die Funktionalität, die
- 36:27dahinter steht n bisschen abstrakter.
- 36:29Ist dann halt eben in der Basisklasse vertreten.
- 36:31Ne und und weil es ist ja immer das Gleiche dann für diesen
- 36:34entsprechenden Button, sagst zum Beispiel N submit Button und
- 36:36dann kriegst du halt wirklich diesen submit Button
- 36:38unterschiedlich gestylt, je nachdem Betriebssystem aber die
- 36:41gleiche Funktionalität, ne das ist auf jeden Fall dann der Sinn
- 36:45dahinter. Das heißt, um das noch mal
- 36:48technisch sich vorzustellen, man hat dann im Code zum Beispiel ne
- 36:51Klassenabstrakte Klasse Button und die Implementierung davon
- 36:54wäre dann zum Beispiel N Windows Button oder N Linux Button.
- 36:57Ja, und die Factory gibt dir den abhängig von dem Betriebssystem,
- 37:00auf dem du bist. N Windows Button oder N Linux
- 37:03Button um es so n bisschen konkreter zu machen.
- 37:05Und ja da sieht man ja eigentlich schon die die
- 37:08Vorteile einer Factory. Ja also du hast halt diese
- 37:10Austauschbarkeit, ne, das heißt mit jeder Subklasse die ich
- 37:14implementiere kriege ich halt auch so ne neue Implementierung
- 37:16rein ohne die anderen anrühren zu müssen.
- 37:19Ganz wichtiger Punkt ja wenn ich das Styling am Linux Button
- 37:22ändern muss ich nichts am Windows Button machen weil der
- 37:24soll ja auch bleiben wie er ist. Das heißt, ich muss da am Code
- 37:26nicht drin rumrühren und kann halt potenziell Fehler einbauen.
- 37:30Das heißt, die Austauschbarkeit ist halt auch gegeben, ne, wenn
- 37:35zum Beispiel der Linux Button einfach ganz anders aussehen
- 37:37soll oder vielleicht gar nicht mehr drin sein soll, oder dazu
- 37:39kommt, du kannst es halt einfach nebeneinander halten sozusagen,
- 37:43das heißt es ist auch besser testbar und wartbar ne wenn ich
- 37:46n Test schreibe für den Windows Button und den Linux Button
- 37:49änder, dann hab ich halt am Windows Button Test natürlich
- 37:51auch immer noch grün, hoffentlich am Ende ne wenn ich
- 37:53es richtig implementiert habe das heißt?
- 37:55Wir haben halt keinen zentralen Code mehr, der alles wissen
- 37:58muss, sondern wir lagern es auf die Subklassen aus, was laut
- 38:03Objektorientiert einfach denn sauber getrennt ist.
- 38:05Ja, definitiv. Und im Endeffekt.
- 38:12Also es gibt natürlich auch Nachteile, es ist ja nicht immer
- 38:14nur so, dass es da die ganze Zeit immer nur ne Vorteil
- 38:16Vorteil, Vorteil, du brauchst natürlich n komplexeres Setup
- 38:20irgendwo ne, also du hast natürlich jetzt.
- 38:23Also dein ganzer Code wird natürlich komplexer an dieser
- 38:26Stelle, weil du zum Beispiel ne, gerade wenn du sagst, du hast
- 38:28mehrere Objekte von einer, also die, die zusammengehören zu
- 38:33einer Familie, ne, dann brauchst du halt so ne so ne basisklasse,
- 38:37die dir sagt, OK ne, meine ganzen Bürger sind am Ende n
- 38:40Bürger ne die verschiedenen. Wenn du jetzt aber das ganze
- 38:43noch länderspezifisch spezifisch aufteilst, dann hast du
- 38:46verschiedene. Burger, die zum Beispiel keine
- 38:49Ahnung, amerikanische Burger sind.
- 38:51Du hast Burger, die aber asiatische Burger sind, ne, und
- 38:54dann hast du wieder diesen diese beiden Burger Varianten, die
- 38:57aber am Ende auch wieder nur Burger sind, das heißt du holst
- 39:00dir natürlich ne höhere Komplexität, ne höhere Tiefe, ne
- 39:03in deinen Code rein. Und das kann natürlich auch dazu
- 39:07führen, dass es vielleicht n bisschen schwieriger am Anfang
- 39:10durchzublicken ist. Ne.
- 39:11Deswegen heißt das andere ja auch simple Factory, weil es
- 39:14halt eigentlich eher n bisschen flacher Gehalt, also diese ganze
- 39:18Hierarchie n bisschen flacher hält.
- 39:19Aber wie gesagt, hier macht es mehr Sinn, wenn es auch n
- 39:22bisschen generell, wenn wenn diese ganze Abhängigkeit
- 39:25komplexer wird, dann also ne mit einer höheren Komplexität steigt
- 39:28meistens halt auch die Komplexität des Codes.
- 39:30Ja, es ist natürlich ratsam, immer zu gucken.
- 39:33Je höher also auch, wenn die Komplexität steigt, Krieg ich es
- 39:36vielleicht doch mit möglichst wenig Komplexität in meinem Code
- 39:39hin, aber ab einem ab einer gewissen Ebene kommt man halt
- 39:43einfach nicht da dazu, dass man halt eine gewisse Komplexität
- 39:47vermeiden kann. Ja, und das ist auch ein gutes
- 39:51Stichwort, Komplexität, und das wäre so im Prinzip die dritte
- 39:54Stufe. Von den Pattern ist dann die
- 39:57sogenannte Abstract Factory, das heißt, wir fangen jetzt quasi
- 40:02noch an, uns zu überlegen. OK, ich hab ne Factory und ich
- 40:06kann jetzt zum Beispiel länderspezifisch den Burger
- 40:09Design ne, also beispielsweise ich möchte n cheeseburger haben
- 40:13und der sieht halt wie gesagt in Japan anders aus als in der USA.
- 40:16So das können wir jetzt schon ganz gut abbilden.
- 40:19Wie sieht das jetzt aber zum Beispiel aus, wenn wir ganze
- 40:21Produktfamilien haben und da kommt dann die Abstract Factory
- 40:24ins Spiel, das heißt, wir haben Produktfamilien, die
- 40:27Zusammengehörig sind, und das kann man an dem Beispiel, wir
- 40:30sind wieder bei dem Burger auch wieder gut erklären, weil ich
- 40:33hab jetzt nicht nur Bock n Burger zu essen, ich fühle es,
- 40:36ich möchte n Menü haben, ja. Ja.
- 40:40Und. Habe jetzt quasi Burger, eine
- 40:42Beilage und ein Getränk. So und das alles natürlich so
- 40:47wie ich es erwarte im Stil des Restaurants, wo ich gerade
- 40:50bestelle, ja sagen wir mal zum Beispiel bei einem Cheeseburger
- 40:57in Amerika kriege ich halt so klassisch Doktor Pepper Cola
- 41:01keine Ahnung und Fries und in Japan zu meinem Teriyaki Burger
- 41:07will ich jetzt nicht unbedingt eine Doktor Pepper dazu haben,
- 41:09sondern ich kriege. Ah, Klischee, auf keiner Matcha
- 41:12Tee oder so. Weißt du also was ich damit
- 41:14meine ist, du hast ja im Prinzip die Menüs die angeboten werden
- 41:20von dem Restaurant sind natürlich auch spezifisch und im
- 41:23Stile ihres Restaurants ja also. Da, das wird sich ja denn
- 41:27grundlegend als gesamte Produktfamilie Burger Menü
- 41:31unterscheiden und da kommt halt denn die Factory ins Spiel, die
- 41:35Abstract Factory, die dann wiederum deine Factory so
- 41:39definiert, zum Beispiel, dass du sagst, ich bin in Japan oder in
- 41:42der USA und dafür sorgt, dass die einzelne Produkte, die jetzt
- 41:48ne Factory intern bereitstellen kann sowas wie gib mir einen
- 41:52Burger, gib mir eine Beilage, gib mir ein Getränk.
- 41:55Dafür sorgt, dass es in sich zur gleichen Produktfamilie gehört,
- 41:59dass ich halt nicht sage, ich Krieg n amerikanischen Burger
- 42:02und ne japanische Beilage zum Beispiel, das wär auch Wahnsinn,
- 42:06das wär Wahnsinn, das nennt man Fusionsküche.
- 42:09Fusionsküche genau, aber weißt du, wie ich meine?
- 42:13Und ich finde, da kann man das eigentlich ganz gut dran
- 42:14erkennen, denn oder beziehungsweise verstehen, warum
- 42:17man diesen Schritt auch noch. Geht ja.
- 42:19Wenn wir jetzt zum Beispiel noch mal dieses UI Beispiel von
- 42:21vorhin nehmen, ne und das noch zum Beispiel auch noch mal daran
- 42:24erklären, noch mal in die Technik n bisschen so
- 42:28abzutauchen ein wenig, dann ist es ja so, dass du zum Beispiel
- 42:32sagst, ich möchte jetzt ein, also meine UI Elemente haben,
- 42:36ne. Also nicht nur einen Button,
- 42:38sondern ich möchte vielleicht auch noch eine Checkbox haben
- 42:40oder ich möchte was gibt es noch einen Radio Button haben oder
- 42:44was auch immer, so verschiedene Elemente, die aber auch wieder
- 42:47logischerweise entsprechend gestylt sind.
- 42:49Du kriegst ja nicht einen Mac Button in Windows Checkbox und
- 42:55eine Linux Radio Button, das wird ja im Endeffekt, also
- 42:59kannst du auch machen, wäre aber irgendwie blöd.
- 43:01So, und dann ist es halt im Endeffekt so, dass du halt
- 43:04abhängig vom Betriebssystem dir diese Familie holst.
- 43:08Von Ui Elementen, von denen du dann wiederum ein spezifisches
- 43:13brauchst. Und im Endeffekt kann man sich
- 43:15das so vorstellen, dass Du eine Factory hast, die anhand des
- 43:20Betriebssystems und also unterscheidet, wenn.
- 43:23Welche Factory sie dir gibt, um den entsprechenden Einzelnen,
- 43:27das einzelne Ui Element zu bekommen.
- 43:29Das heißt du hast eine Factory die dir eine Factory ausspuckt,
- 43:31die dir dann am Ende wieder ein Objekt gibt.
- 43:35Genau also im Prinzip. Das ist ein gutes Beispiel, und
- 43:39wenn wir jetzt noch mal so auf auf die Ui Elemente gehen, du
- 43:42definierst ja nicht jedes Mal. Also du, du erzeugst dir jetzt
- 43:46ja nicht eine Factory für Buttons und sagst jedes Mal wenn
- 43:48Du einen Button haben möchtest übrigens Windows.
- 43:51Und jetzt gib mir noch ne Checkbox.
- 43:53Übrigens Windows ja und dann machst du irgendwann den Fehler.
- 43:56Übrigens Linux. Ach verdammt weißt du und
- 43:59deswegen gehst du quasi diesen Weg mit der Abstract Factory und
- 44:03sagst gib mir ne UI Factory Windows und die kann dir jetzt
- 44:08sagen create Button, create checkbox und es wird immer.
- 44:13Windows sein am Ende, weil du das unter der Haube quasi so
- 44:16definiert hast. Und dann musst du dir bei der
- 44:18Anwendung oder bei dem Erstellen der Objekte darüber keine
- 44:21Gedanken mehr machen und das bringt halt mehrere Vorteile mit
- 44:24sich. Also erstmal, es ist konsistent,
- 44:26ja wie du gerade meintest, es passt alles zusammen,
- 44:29beispielsweise wenn ich betriebssystemabhängig bin.
- 44:32Es ist super testbar. Ich kann die einzelnen
- 44:34Betriebssystem Stylings abtesten es ist austauschbar, ne, weil es
- 44:38muss ja nicht nur Betriebssystem abhängig sein, so ein
- 44:41klassischer Anwendungsfall sind ja auch so Themes sage ich mal
- 44:46ne habe ich ein helles Layout, habe ich ein dunkles Layout und
- 44:49ich möchte ja nicht bei jedem UI Element sagen, übrigens du bist
- 44:51gerade ein dunkles Layout oder ein helles Layout nein du willst
- 44:55es ja global irgendwo entscheiden und dann einfach
- 44:57darauf arbeiten sozusagen oder wenn du eine Testumgebung
- 45:01erzeugen willst dann. Willst du ja auch sagen, gib mir
- 45:04mal meine Test Factory, ich will jetzt da was ausprobieren, zum
- 45:07Beispiel also das das bringt halt viele Vorteile mit sich
- 45:10schnell austauschbar auch zu sein.
- 45:13Ja Nachteil glaube ich kann man eigentlich ganz schnell erklären
- 45:16oder komplex. Ja klar, das ist natürlich die
- 45:21komplexeste Variante von allen Factories.
- 45:23Und wie gesagt, ich ich persönlich würde auch darauf
- 45:27verzichten, wenn es nicht notwendig wäre, ne, also diese
- 45:30dritte Variante. Was ich noch sagen würde ist,
- 45:34weil das ist zum Beispiel auch n Punkt, der hat sich früher
- 45:37irgendwie ganz am Anfang von meinem Studium.
- 45:39Zum Beispiel hat sich auch nicht so richtig erschlossen und ich
- 45:42würd das auch vielleicht noch mal so, weil ich denk mir so,
- 45:45vielleicht hat man mal das Problem gehabt, was vielleicht
- 45:47andere auch haben oder das Verständnisproblem, man kann
- 45:50sich ja jetzt hinstellen und sagen, was bringt denn
- 45:52eigentlich so ne Factory, wieso sag ich jetzt zum Beispiel nicht
- 45:54einfach ey, dann erstelle ich mir n neues Objekt davon und
- 45:56dann mach ich damit was und da an einer anderen Stelle nehm ich
- 45:59mir halt n anderes Objekt. Ne was ich da halt vielleicht
- 46:02brauche und dann mache ich das halt ne, weil du ja meintest am
- 46:05Anfang um noch mal den Bogen zum Anfang zu schießen.
- 46:08Du hast dann überall mal New Objekt von dem New Objekt von
- 46:11dem mach mal dies mach mal das ne und wenn du dir jetzt zum
- 46:14Beispiel vorstellst du hast n ne Anwendung auf deinem eigenen
- 46:18Server laufen und du sagst zum Beispiel OK ich möchte aber
- 46:20diesen Server, also ich möchte meine Anwendung überwachen und
- 46:25du hast jetzt zum Beispiel du fängst an und sagst OK ich
- 46:27möchte jetzt. Diese, wenn irgendein Problem
- 46:30auftritt, möchte ich zum Beispiel mich selber
- 46:32notifizieren, ne mit einer e Mail so dann mach ich, erstelle
- 46:38ich irgendwie mir so NE Mail notifier und sag send mal die
- 46:42notification raus über die e Mail ne so und dann hast du aber
- 46:46vielleicht irgendwann denkst du dir so oh e Mail wirklich, das
- 46:48ist einfach da ich ich guck nicht immer so oft in die e
- 46:51Mails ich brauch das vielleicht als SMS oder so ne so das heißt
- 46:54du sagst ey ich erstell mir jetzt noch n.
- 46:56Weiteren Notifire, nämlich einen SMS notifire und sende dann
- 46:59sozusagen noch als SMS raus. So, und wenn du jetzt aber
- 47:02irgendwann sagst, weiß nicht SMS, ich habe manchmal irgendwie
- 47:05bin in einem Funkloch, aber Internet habe ich irgendwie, ich
- 47:07brauche das auch noch für eine App als push Nachricht, dann
- 47:09machst du noch einen Push notifire so ne, dann hast du 3
- 47:12verschiedene Notifire, die du aber alle in diesem wenn jetzt
- 47:16zum Beispiel ein Fehler in deinem in deiner Anwendung
- 47:18auftritt, möchtest du über alle notifire dich notifizieren,
- 47:21damit du auch wirklich mitkriegst.
- 47:23Es ist ein Fehler aufgetreten im System ne.
- 47:26Und egal, wo du dich gerade aufhältst, entweder du hast kein
- 47:28Internet oder du hast einen Netzausfall oder du hast gerade
- 47:31keine Ahnung, mal wieder nicht in die e Mails geguckt, irgendwo
- 47:34willst du es halt herkriegen diese Information und dann
- 47:37möchtest du deinem Code aber nicht sagen, create new e mail
- 47:40notifeier und sende create new SMS notifeier und sende create
- 47:46new push notifeier und sende ne, das müsstest du ja für jeden,
- 47:49für jedes immer wieder noch mal neu machen.
- 47:52Und wenn du jetzt aber sagst, ein e Mail notifier und eine SMS
- 47:55Notifier und Push notifier sind alles irgendwo notifier ist
- 47:58jetzt egal welche Factory an der Stelle und wie das genau
- 48:00implementiert ist. Aber du kannst dann zum Beispiel
- 48:03wenn du noch ein Notifier hinzufügen möchtest, kannst du
- 48:06alle in eine Liste von Notifier packen und dann mit einer vor
- 48:10darüber gehen und einfach sagen okay notifier send so, das heißt
- 48:14du hast einen viel eleganteren Code am Ende als immer zu sagen.
- 48:18Also du musst natürlich diesen Notifire dann über deine Factory
- 48:21die entsprechenden Notifire erstellen und einen neuen
- 48:24hinzufügen. Du musst aber nicht jedes Mal
- 48:26sagen okay, ich mache das jetzt für jedes erstelle ich ein neues
- 48:29Objekt und so weiter und sofort, sondern du nutzt immer nur die
- 48:31Factory sagst du möchtest ein bestimmtes neues Ding haben,
- 48:35kriegst es dann packst es in die Liste und wenn du jetzt zum
- 48:38Beispiel sagst, du hast eine Liste und in vielen Sprachen die
- 48:40jetzt auch Typsicher sind, kannst du ja nicht sagen, ich
- 48:43erstell eine Liste von einem Objekt.
- 48:45E Mail notifire von dem Objekt SMS Notifire und von dem Objekt
- 48:49Push notifire weil es sind 3 unterschiedliche Objekte.
- 48:51Wenn du aber sagst das sind alles notifire, dann kannst du
- 48:54ne Liste von Notifirern erstellen und dann darüber
- 48:56iterieren und das sind manchmal so dann die Vorteile die das
- 49:01dann am Ende mit sich bringt. So weißt du so Kleinigkeiten wo
- 49:04ich am Anfang wo ich mir weißt du das ist immer so bescheuert
- 49:08so am Anfang des Studiums dachte ich dann so was wie ja was
- 49:10brauche ich das ich verstehe den Anwendungsfall noch nicht und
- 49:13irgendwann kam ich an den Punkt wo ich mir dachte das ich würd
- 49:15das jetzt gern alles in eine Liste packen aber es geht nicht
- 49:18und dann irgendwann kam so diese Connection wo ich mir dachte Oh
- 49:22ne Factory weißt du und das kann man halt wie gesagt ist
- 49:27unabhängig vom Typ der Factory kann man mit allen machen, die
- 49:31Implementierung ist dann sei mal dahingestellt, da haben wir ja
- 49:34auch schon n paar Beispiele genannt, aber das ist zum
- 49:36Beispiel finde ich n sehr sehr wichtiges Beispiel um zu zeigen
- 49:40so kannst du ne Factory nutzen als genau.
- 49:44Es hält halt den Code schlank, dann am Ende alright.
- 49:48Genau dann hatten wir ja noch n konkretes Beispiel am Ende dann
- 49:51würde ich sagen lass uns doch mal noch mal kurz
- 49:52zusammenfassen, ich kann ja noch mal die meta Analogie Ebene
- 49:57zusammenfassen, die wir so quasi aufgebaut haben in dieser Folge
- 50:03also gehen wir noch mal quasi von.
- 50:08Unserem Burgerladen aus ne also die simple Factory ist ich geh
- 50:12jetzt hin und bestelle einen einzelnen Burger.
- 50:14Ja, also wirklich nur ich bin in einem Laden, es gibt nur diesen
- 50:17Laden, es gibt nur einen definierten Cheeseburger und ich
- 50:20will n Cheeseburger haben, dann ist klar wie der aussieht und
- 50:22ich Krieg den ja das erweitert wenn wir jetzt gesagt haben na
- 50:27ja verschiedene Köche gleiche Karte aber unterschiedlicher
- 50:30Burger ne also ich kann jetzt bei verschiedenen Köchen.
- 50:33Einen Cheeseburger bestellen und der wird halt unterschiedlich
- 50:35sein am Ende, weil es ja der unter unterschiedlich zubereitet
- 50:39wird, sehr wahrscheinlich, da hatten wir ja die
- 50:40Länderbeispiele genannt und da kommt halt die Factory, das
- 50:43eigentliche Factory Pattern ins Spiel, dass man sagt, gut, wir
- 50:45haben jetzt abstrakten Burger und der wird jetzt in den
- 50:49Subklassen definiert Cheeseburger und so sieht er aus
- 50:53und jeder implementiert sich seinen Cheeseburger, sozusagen
- 50:55ne und dann abhängig davon wo ich bin, kriege ich dann
- 50:58dementsprechend den Cheeseburger und die Abstract Factory.
- 51:03Die maximale Ausbaustufe, sag ich mal, ist halt das
- 51:06Menübeispiel. Wenn ich jetzt n komplettes Menü
- 51:09haben möchte, dann krieg ich halt auch entsprechend immer
- 51:11passend Beilagen und Getränke beziehungsweise ich kann denn
- 51:14nur auswählen, was passend für den Laden dazu ist.
- 51:17Ja, also wie sieht das Burger Menü da aus?
- 51:20Genau. Und das ganze n bisschen
- 51:22technisch. Kannst du es noch so n bisschen
- 51:23einordnen wo du was so ungefähr verwenden würdest?
- 51:27Zum Beispiel? Wir hatten es ja jetzt auch so
- 51:29in der Folge n bisschen angeschnitten.
- 51:30Ja, also simple Factory, ne, da hat man hat man eher zum
- 51:35Beispiel so n Interface was man verwendet für kleinere Projekte
- 51:38vielleicht Tutorials ne wenn man jetzt nicht so viele Varianten
- 51:41von Objekten von von von einem Typ hat, beispielsweise das
- 51:45Factory Pattern jetzt beispielsweise.
- 51:48Wenn man dann mehr Objekte, wenn es komplexer wird, man halt
- 51:51mehrere Objekte hat, die vielleicht auch noch in Klassen
- 51:55wiederum gegliedert werden können, ne und also wie jetzt
- 52:00zum Beispiel halt ne, was du ja auch gerade beschrieben hattest
- 52:02mit deinen Beispielen und wenn du jetzt abstract Factory ne
- 52:08Abstract factory nimmst, dann bist du halt auf
- 52:11unterschiedlichen Objektfamilien unterwegs.
- 52:16Dass du halt sagst, okay. Du kannst erstmal über das
- 52:19Factory Pattern kannst du dir ein eine bestimmte Familie
- 52:24überhaupt holen, dass man da gar nicht irgendwie sich vertun kann
- 52:28und dann ein spezifisches Objekt aus dieser Familie, das heißt du
- 52:32Filterst im Endeffekt ein bisschen vor, so und ja, dafür
- 52:40sind eigentlich die Sachen ganz gut gedacht, wie gesagt, es ist
- 52:43ich glaube so ein Abstract Factory.
- 52:47Habe ich zum Beispiel selber noch gar nicht verwenden müssen,
- 52:49weil es ist auch immer die Frage, wann braucht man das
- 52:53wirklich. Es ist, es ist ratsam, so was
- 52:56irgendwann mal einfach spaßeshalber zu programmieren,
- 52:59um es mal gemacht zu haben, aber das bedeutet noch lange nicht,
- 53:02dass es unbedingt wichtig ist, das anzuwenden, ne, aber wenn du
- 53:05jetzt zum Beispiel sagst simple Factory und Factory Pattern,
- 53:08diese beiden würde ich zum Beispiel schon als sehr
- 53:11hochfrequent einordnen und das ist durchaus wirklich wichtig,
- 53:14dass man auch dann. Das versteht und das auch
- 53:17anwenden. Kann also.
- 53:19Die Abstract Factory ist sehr wahrscheinlich oder oftmals
- 53:23nicht notwendig selbst zu implementieren, weil man ja auch
- 53:25oft auf Frameworks und Libraries zurückgreift, die das unter der
- 53:29Haube implementieren. Gerade so in der Cross Plattform
- 53:31Welt wird das ja dir quasi genau diese Sachen werden die ja
- 53:37abgenommen dann am Ende ne, weil das halt unter der Haube so
- 53:40implementiert wurde. Aber das wäre auch so.
- 53:43Ich würde gerne noch so ein 2 Tipps oder jeder ein Tipp kann
- 53:46man am Ende noch mitgeben so bevor ich die Folge schließe
- 53:48sage ich mal, das wäre nämlich auch genau mein Tipp gewesen,
- 53:51was du gerade angeschnitten hast.
- 53:54Ist liebe Zuhörer, liebe Zuhörer, falls du dich mit dem
- 53:56Factory Pattern noch nicht so auseinandergesetzt hast oder
- 53:59immer noch ein bisschen struggles, weil du vielleicht
- 54:00gerade am Anfang der Softwareentwicklung stehst,
- 54:03probiere es aus, nimm dir die Beispiele unserer Analogien wie
- 54:06zum Beispiel mcdonalds oder dem Burgerladen allgemein oder die
- 54:10Pizzeria oder. Und Programmier damit mal
- 54:13einfach n factory pattern, sag dir, ich mach jetzt n simple
- 54:16Factory, dann refactor ich das zum Factory Pattern zum Beispiel
- 54:20und ich probier auch mal ruhig n Abstract Factory aus, damit ich
- 54:23es einfach mal gemacht hab, dann sieht man einfach, welche coole
- 54:25Möglichkeit dieses Pattern bildet oder bietet um Code zu
- 54:29strukturieren. Ja, auf jeden Fall.
- 54:32Und wie gesagt, am besten immer. Kleinen anfangen, sich dann wie
- 54:36du auch eigentlich meintest ne du hangelt, man hangelt sich
- 54:38einfach von der einen Factory zur anderen durch und ich würde
- 54:41auch einfach mal wirklich sagen OK wenn man das gemacht hat und
- 54:44diese Factory gebaut hat würde ich noch mal sozusagen daneben
- 54:48legen. Das gleiche Beispiel was du
- 54:50gebaut hast und keine Factory verwenden um einfach mal genau
- 54:53gegenüber zu diesen diese Gegenüberstellung zu haben.
- 54:56Wie sieht es denn mit aus und wie sieht es ohne aus und was
- 54:59gefällt mir besser und die Antwort liegt nach dieser Folge
- 55:02eigentlich auf der Hand. Ja.
- 55:04Sehr gut. Ich denke, wir haben es sehr
- 55:06umfangreich besprochen, da sieht man mal, dass man zu so einem
- 55:09Designpattern echt viel erzählen kann, gerade wenn man damit mal
- 55:12so n bisschen Analogien bringt. Aber ganz ehrlich, das hilft
- 55:16einfach mega das zu verstehen, das hat mir damals geholfen und
- 55:18ich hätte mir gewünscht, dass mir jemand das mal so anhand von
- 55:21einfachen Beispielen erklärt und deswegen vielen Dank dafür, Fabi
- 55:25ebenso Liebe zur Liebe zur falls dir die Folge gefallen hat oder
- 55:29du Anmerkungen hast zu den Pattern oder Fragen, schreib uns
- 55:33gerne. Alle Links zu den Plattformen
- 55:35oder auch unsere Podcast Mail findest du in den Shownotes.
- 55:38Wenn dir der Podcast allgemein gefällt, lass auch gerne ne
- 55:41Bewertung da, das hilft uns quasi weiter zu wachsen und noch
- 55:45mehr Leuten unseren Content anbieten zu können und damit
- 55:48noch mehr Leute davon profitieren können.
- 55:50Und ja, ansonsten würde ich sagen, hören wir uns alle beim
- 55:54nächsten Mal wieder. Und lasst euch den Burger
- 55:56schmecken. Und lasst euch den Burger, ich
- 55:58geh jetzt Burger bestellen. Und habt ne gute Zeit bis dahin
- 56:02und bis zum nächsten Mal deine Coding Bodys.
- 56:05Gemeinsam besser.