Echte wereld: iOS-ontwerppatronen

Ontwerppatroon is een veel voorkomend onderwerp in gesprekken, forums en zelfs in een pauze van 15 minuten op het werk. Je kunt er veel over vinden in boeken of op internet en veel voorbeelden met behulp van badeendjes coffee, coffeeshop en pizzawinkels .

Toen ik begon met studeren, begrijp ik meestal het patroon, maar ik had veel problemen met het nadenken over hoe ik ze op mijn code kon toepassen. Ik begrijp dat het fabriekspatroon wordt gebruikt om objecten te maken, maar waarom heb ik het nodig? Heb ik echt een fabriek nodig om mijn objecten te maken?

Mijn doel met dit bericht is om enkele echte voorbeelden te geven van enkele ontwerppatronen die ik in mijn projecten heb gebruikt.

Strategie

Het strategiepatroon maakt het selecteren van een algoritme tijdens runtime mogelijk. In plaats van een enkel algoritme rechtstreeks te implementeren, ontvangt code runtime-instructies over welke in een familie van te gebruiken algoritmen.

We kunnen verschillende algoritmen gebruiken op basis van runtime, met andere woorden, het maakt ons niet uit hoe de implementatie is uitgevoerd.

Een algoritme heeft een object nodig dat weet hoe te vliegen, een klasse Duck weet hoe te vliegen en ook een klasse Rocket. Ons algoritme maakt het niet uit of onze implementatie zijn vleugels of een gallon gas moet spreiden.

Probleem opgelost met behulp van strategie

Het was dit project dat we nodig hadden om een ​​viewController te kunnen ontvangen, maar we hebben het ook nodig om wat voorgedefinieerd gedrag te hebben en dat is een perfecte plek om het Strategiepatroon toe te passen. Een veel voorkomende ViewController in mobiele applicaties is een Login, dus maak gewoon een protocol dat onze LoginViewController-acties en afhankelijkheden definieert.

Ik bedoel dat onze LoginViewController in ons project kan worden geïnjecteerd, we geven niet om de gebruikersinterface als deze een tableView, animatie of validatiemethoden heeft, maar we hebben deze nodig om te weten hoe een login moet worden uitgevoerd. U kunt hier meer lezen over dit specifieke probleem.

Fabriek

Het fabrieksmethodepatroon behandelt het probleem van het maken van objecten zonder de exacte klasse van het object dat moet worden gemaakt, op te geven.

Het fabriekspatroon is handig wanneer u tijdens runtime objecten moet maken. Dus als de gebruiker een kaaspizza wil, maakt u een CheesePizza () als hij / zij een pepperoni wil, dus PepperoniPizza () ftw.

Probleem opgelost met fabriek

In hetzelfde project dat we het strategiepatroon gebruiken om ons injectieprobleem van viewController op te lossen, gebruiken we een fabriekspatroon om tijdens runtime objecten te maken die alle afhankelijkheden doorgeven die ze nodig hebben.

We moesten een instantie van LoginViewController pushen die kan worden gemaakt met behulp van verschillende benaderingen, zoals Storyboards, xib of gecodeerd bekijken. We hadden een fabrieksinstantie, die kan worden geïnjecteerd door de manier te veranderen waarop het object dat door de fabriek wordt gemaakt, de fabriek zelf verandert.

Met een instantie van een fabriek hoeven we alleen de build-methode aan te roepen. Deze fabriek kan een instantie zijn van ViewCodedLoginViewControllerFactory of StoryboardLoginViewControllerFactory, het kan ons niet echt schelen, we hebben het alleen nodig om de buildmethode te implementeren die een LoginViewController retourneert.

Hier hebben we één fabriek voor elk soort objecten, maar we kunnen een fabriek hebben die weet hoe een ViewController te bouwen van storyboard, xibs of viewcoded.

Decorateur

Met het decoratorpatroon kan het gedrag worden toegevoegd aan een individueel object, statisch of dynamisch, zonder het gedrag van andere objecten uit dezelfde klasse te beïnvloeden.

Dit is mijn favoriete patroon, het klassieke voorbeeld van decorateurpatroon is de coffeeshop die slagroom aan zijn koffie wil toevoegen en de nieuwe prijs en beschrijving op basis van de drank wil berekenen.

Probleem opgelost met decorateur

We hebben verschillende API-versies nodig voor elke serviceaanvraag, dit kan op veel verschillende manieren, maar we gebruiken dit patroon om een ​​aangepaste koptekst aan een verzoek toe te voegen. Met deze aanpak kunnen we ook gereed zijn als in de toekomst een API-aanroep een andere parameter aan de header moet toevoegen.

We moesten ook de resultaten in een verzoek filteren. Dit kan worden gedaan door een nieuwe methode te maken of door te wijzigen hoe uw aanvraag werkt. We hebben besloten om een ​​Decorator te gebruiken om dit gedrag toe te voegen, omdat onze service in andere klassen werd gebruikt en we het minst mogelijke aantal regels in onze vorige implementatie willen wijzigen.

Adapter

Het adapterpatroon is een software-ontwerppatroon waarmee de interface van een bestaande klasse als een andere interface kan worden gebruikt. Het wordt vaak gebruikt om bestaande klassen met anderen te laten werken zonder hun broncode te wijzigen.

Denk aan een adapter als een echte adapter. Je hebt je Nintendo 64 met een composietvideo als video-uitgang nodig om met je nieuwe 4K-tv te werken . U hebt dus een Composite-HDMI-adapter nodig.

Probleem opgelost met adapter

We moesten vier cijfers van een kaartmodel gebruiken en ook compatibel zijn met PKPaymentPass. Met andere woorden, een adapter gemaakt om van één PKPaymentPass-instantie een kaart te maken.

Maar we kunnen ook patronen combineren om meer herbruikbare en onderhoudbare code te creëren, bijvoorbeeld door onze adapter te mengen met het strategiepatroon. We hebben niet echt een Card-object nodig, we hebben alleen de laatste nummers nodig, dus waarom maken we geen protocol om dat te doen en compatibel te zijn met PKPaymentPass, Card en andere objecten die ons project mogelijk nodig heeft.

Tenslotte

Ontwerppatronen helpen me veel om meer herbruikbare code te maken, me wat tijd te besparen wanneer ik dingen aan codes moest veranderen en vanwege deze taken zijn sommige taken veel eenvoudiger dan ze zouden moeten zijn.

Als je het niet begrijpt hoe de patronen werken, zijn hier enkele geweldige berichten over Strategie, Fabriek, Decorateur en Adapter.

Ps: als je dit bericht leuk vindt, deel het dan op Twitter, beveel het aan op medium, of beide =). Dit helpt me echt om meer mensen te bereiken. Hartelijk bedankt.