Reale Welt: iOS Design Patterns

Design Pattern ist ein häufiges Thema in Vorträgen, Foren und sogar in einer 15-minütigen Gesprächspause bei der Arbeit. In Büchern oder im Internet finden Sie eine Menge Zeug darüber und eine Menge Beispiele für die Verwendung von Gummienten, Coffeeshops und Pizzaläden.

Zu Beginn des Studiums verstehe ich normalerweise das Muster, hatte jedoch große Probleme damit, darüber nachzudenken, wie ich sie auf meinen Code anwenden kann. Ich verstehe, dass das Factory-Muster zum Erstellen von Objekten verwendet wird, aber warum brauche ich es? Brauche ich wirklich eine Factory, um meine Objekte zu erstellen?

Mein Ziel mit diesem Beitrag ist es, einige reale Beispiele für Designmuster zu liefern, die ich in meinen Projekten verwendet habe.

Strategie

Das Strategiemuster ermöglicht die Auswahl eines Algorithmus zur Laufzeit. Anstatt einen einzelnen Algorithmus direkt zu implementieren, erhält der Code Laufzeitanweisungen, welche in einer Familie von Algorithmen verwendet werden sollen.

Wir können verschiedene Algorithmen zur Laufzeit verwenden, mit anderen Worten, es ist uns egal, wie die Implementierung durchgeführt wird.

Ein Algorithmus benötigt ein Objekt, das fliegen kann, eine Entenklasse, die fliegen kann, und eine Raketenklasse. Unserem Algorithmus ist es egal, ob unsere Implementierung seine Flügel oder eine Gallone Gas ausbreiten muss.

Problem mit Strategie gelöst

In diesem Projekt mussten wir in der Lage sein, einen viewController zu erhalten, aber wir müssen auch einige vordefinierte Verhaltensweisen haben. Dies ist der perfekte Ort, um das Strategiemuster anzuwenden. Ein gängiger ViewController in mobilen Anwendungen ist ein Login. Erstellen Sie also einfach ein Protokoll, das unsere LoginViewController-Aktionen und Abhängigkeiten definiert.

Ich meine, dass unser LoginViewController in unser Projekt eingefügt werden kann. Die Benutzeroberfläche ist uns egal, wenn sie eine tableView, eine Animation oder Validierungsmethoden enthält, aber wir benötigen sie, um zu wissen, wie eine Anmeldung durchgeführt wird. Sie können hier mehr über dieses spezielle Problem lesen.

Fabrik

Das Factory-Methodenmuster behandelt das Problem des Erstellens von Objekten, ohne die genaue Klasse des zu erstellenden Objekts angeben zu müssen.

Das Factory-Muster ist nützlich, wenn Sie zur Laufzeit Objekte erstellen müssen. Wenn der Benutzer eine Käsepizza möchte, erstellen Sie eine CheesePizza (), wenn er eine Peperoni möchte, also PepperoniPizza () ftw.

Problem im Werk behoben

In demselben Projekt, in dem wir das Strategie-Pattern verwenden, um unser viewController-Injection-Problem zu lösen, verwenden wir ein Factory-Pattern, um Objekte zur Laufzeit zu erstellen und ihnen alle Abhängigkeiten zu übergeben, die sie benötigen.

Wir mussten eine Instanz von LoginViewController pushen, die mit verschiedenen Ansätzen wie Storyboards, xib oder view-codiert erstellt werden kann. Wir hatten eine Factory-Instanz, die injiziert werden kann, indem das Objekt, das von der Factory erstellt wird, die Factory selbst ändert.

Bei einer Instanz einer Factory müssen wir nur die Erstellungsmethode aufrufen. Diese Factory kann eine Instanz von ViewCodedLoginViewControllerFactory oder StoryboardLoginViewControllerFactory sein. Es ist uns eigentlich egal, wir müssen nur die Erstellungsmethode implementieren, die einen LoginViewController zurückgibt.

Hier haben wir eine Factory für jede Art von Objekten, aber wir können eine Factory haben, die weiß, wie man einen ViewController aus Storyboard, xibs oder viewcoded erstellt.

Dekorateur

Das Dekorationsmuster ermöglicht das Hinzufügen des Verhaltens zu einem einzelnen Objekt, entweder statisch oder dynamisch, ohne das Verhalten anderer Objekte derselben Klasse zu beeinflussen.

Dies ist mein Lieblingsmuster, das klassische Beispiel für Dekorationsmuster ist das Café, das seinem Kaffee Schlagsahne hinzufügen und den neuen Preis und die neue Beschreibung auf der Grundlage des Getränks berechnen möchte.

Problem mit Dekorateur gelöst

Wir benötigen unterschiedliche API-Versionen für jeden Service-Aufruf. Dies kann auf viele verschiedene Arten erfolgen, aber wir verwenden dieses Muster, um einer Anfrage einen benutzerdefinierten Header hinzuzufügen. Mit diesem Ansatz können wir auch bereit sein, wenn in Zukunft ein API-Aufruf seinem Header einen weiteren Parameter hinzufügen soll.

Wir mussten auch Ergebnisse in einer Anfrage filtern. Mit dieser Methode können Sie eine neue Methode erstellen oder die Funktionsweise Ihrer Anforderung ändern. Wir haben beschlossen, ein Decorator zu verwenden, um dieses Verhalten hinzuzufügen, da unser Service in anderen Klassen verwendet wurde und wir die geringstmögliche Anzahl von Zeilen in unserer vorherigen Implementierung ändern möchten.

Adapter

Das Adaptermuster ist ein Softwareentwurfsmuster, mit dem die Schnittstelle einer vorhandenen Klasse als andere Schnittstelle verwendet werden kann. Es wird häufig verwendet, um vorhandene Klassen mit anderen zusammenarbeiten zu lassen, ohne ihren Quellcode zu ändern.

Denken Sie einen Adapter als einen echten Adapter. Sie benötigen Ihren Nintendo 64, dessen Videoausgang ein Composite-Video enthält, um mit Ihrem neuen 4k-Fernseher zu funktionieren. Sie benötigen also einen Composite-HDMI-Adapter.

Problem mit Adapter behoben

Wir mussten vier Ziffern eines Kartenmodells haben und auch mit PKPaymentPass kompatibel sein. Mit anderen Worten, erstellt einen Adapter, um eine PKPaymentPass-Instanz in Card zu verwandeln.

Wir können aber auch Muster mischen, um mehr wiederverwendbaren und verwaltbaren Code zu erstellen, indem wir beispielsweise unseren Adapter mit dem Strategiemuster mischen. Wir brauchen nicht wirklich ein Kartenobjekt, wir brauchen nur die lastNumbers, also warum erstellen wir kein Protokoll, um das zu tun und sind kompatibel mit PKPaymentPass, Card und jedem anderen Objekt, das unser Projekt möglicherweise benötigt.

Endlich

Entwurfsmuster helfen mir sehr dabei, wiederverwendbaren Code zu erstellen, und ersparen mir Zeit, wenn ich einiges an Code ändern musste. Aufgrund dieser Muster sind einige Aufgaben viel einfacher, als sie sein sollten.

Wenn Sie nicht verstehen, wie die Muster hier funktionieren, finden Sie hier einige großartige Beiträge zu Strategie, Factory, Decorator und Adapter.

Ps: Wenn dir dieser Beitrag gefällt, teile ihn auf Twitter, empfehle ihn auf Medium oder beidem =). Das hilft mir wirklich, mehr Menschen zu erreichen. Vielen Dank.