Oikea maailma: iOS-suunnittelumallit

Suunnittelumalli on yleinen aihe keskusteluissa, foorumeissa ja jopa 15 minuutin tauon keskusteluissa työssä. Löydät siitä paljon kirjoja kirjoista tai Internetistä ja paljon esimerkkejä kumi-ankkoja coffee, kahviloita p ja pizzakauppoja .

Opiskellessani ymmärrän yleensä kuvion, mutta minulla oli paljon vaikeuksia ajatellessani kuinka soveltaa niitä koodiini. Ymmärrän, että tehdaskuviota käytetään objektien luomiseen, mutta miksi tarvitsen sitä? Tarvitsenko todella tehdasta esineiden luomiseen?

Tavoitteenani tällä viestillä on tuoda todellisia esimerkkejä jokaisesta suunnittelumallista, joita käytin projekteissani.

strategia

Strategiakuvio mahdollistaa algoritmin valitsemisen suorituksen aikana. Sen sijaan, että toteutettaisiin yksi algoritmi suoraan, koodi vastaanottaa ajo-ohjeet siitä, mitä käytettävässä algoritmiperheessä on.

Voimme käyttää erilaisia ​​algoritmeja runtime-based, toisin sanoen, emme välitä kuinka toteutus tapahtuu.

Algoritmi tarvitsee objektin, joka osaa lentää, ankan luokka osaa lentää ja myös Rocket-luokan. Algoritmiamme ei välitä, onko toteutuksen meidän levittää siipiään tai gallonaa kaasua.

Ongelma ratkaistiin strategialla

Sitä varten tämä projekti meillä oli oltava mahdollisuus saada viewController, mutta tarvitsemme myös sitä, että sillä olisi joitain ennalta määritettyjä käyttäytymismalleja, ja se on täydellinen paikka soveltaa strategiakuviota. Mobiilisovelluksissa yleinen ViewController on kirjautuminen, joten luo vain protokolla, joka määrittelee LoginViewController-toiminnot ja riippuvuudet.

Tarkoitan, että LoginViewController voidaan injektoida projektiimme, emme välitä käyttöliittymästä, jos siinä on taulukonäkymä, animaatio tai validointimenetelmät, mutta tarvitsemme sen tietääksesi kuinka kirjautua sisään. Voit lukea lisää tästä ongelmasta täällä.

Tehdas

Tehdasmenetelmämalli käsittelee objektien luomisongelmaa määrittämättä luotavan objektin tarkkaa luokkaa.

Tehdaskuvio on hyödyllinen, kun objektit on luotava suorituksen aikana. Joten jos käyttäjä haluaa juustopizzaa, luot CheesePizza (), jos hän haluaa pepperonin, joten PepperoniPizza () ftw.

Ongelma ratkaistiin tehtaalla

Samassa projektissa, jossa käytämme strategiakuviota ratkaistaksemme viewController-injektio -ongelmamme, käytämme tehdaskuviota pystyäksemme luomaan objekteja suorituksen aikana siirtämällä heille kaikki tarvitsemansa riippuvuudet.

Meidän piti työntää LoginViewController-esiintymää, joka voidaan luoda käyttämällä erilaisia ​​lähestymistapoja, kuten Kuvakäsikirjoitukset, xib tai näkymäkoodattu. Meillä oli tehdasesimerkki, joka voidaan injektoida muuttamalla tapaa, jolla objekti luodaan tehtaan vaihtaessa itse tehdasta.

Tehtaan esiintymän yhteydessä meidän on vain kutsuttava rakennusmenetelmä. Tämä tehdas voi olla esimerkiksi ViewCodedLoginViewControllerFactory tai StoryboardLoginViewControllerFactory, josta meillä ei ole väliä, tarvitsemme sitä vain rakentaaksesi menetelmän, joka palauttaa LoginViewControllerin.

Täällä meillä on yksi tehdas jokaiselle tyyppiselle esineelle, mutta meillä voi olla yksi tehdas, joka osaa rakentaa ViewController -sovelluksen kuvakäsikirjoituksesta, xibistä tai näkymäkoodatusta.

sisustusarkkitehti

Sisustussuunnittelijamalli sallii käyttäytymisen lisäämisen yksittäiseen esineeseen joko staattisesti tai dynaamisesti vaikuttamatta muiden saman luokan esineiden käyttäytymiseen.

Tämä on suosikkini malli, klassinen esimerkki sisustusarkkitehtuurista on kahvila, joka haluaa lisätä kahvissaan kermakermaa ja laskea uuden hinnan ja kuvauksen juoman perusteella.

Ongelma ratkaistiin sisustajan avulla

Tarvitsemme erilaisia ​​sovellusliittymäversioita jokaiselle palvelupyynnölle. Tämä voidaan tehdä monella eri tavalla, mutta lisäämme mukautetun otsikon pyyntöön tämän mallin avulla. Tällä lähestymistavalla voimme myös olla valmiita, jos tulevaisuudessa yhden API-puhelun pitäisi lisätä toinen parametri otsikkoonsa.

Meidän oli myös suodatettava pyynnön tulokset. Mikä voidaan tehdä luomalla uusi menetelmä tai muuttamalla pyyntösi toimivuutta. Päätimme käyttää Decoratoria lisätäksesi tämän käytöksen, koska palveluamme käytettiin muissa luokissa ja haluamme muuttaa mahdollisimman vähän rivien määrää edellisessä toteutuksessa.

sovitin

Sovitinmalli on ohjelmistosuunnittelumalli, joka mahdollistaa olemassa olevan luokan rajapinnan käytön toisena rajapintana. Sitä käytetään usein saamaan olemassa olevat luokat toimimaan muiden kanssa muuttamatta heidän lähdekoodiaan.

Ajattele sovitinta todellisena sovittimena. Tarvitset Nintendo 64 -laitteesi, jonka videoulostulona on komposiittivideo, toimimaan uuden 4k-TV: n kanssa. Tarvitset siis komposiitti-HDMI-sovittimen.

Ongelma ratkaistu sovittimen avulla

Piti viimeisenä neljä korttimallin numeroa olla yhteensopivia PKPaymentPassin kanssa. Toisin sanoen loi sovittimen muuntaaksesi yhden PKPaymentPass-ilmentymän kortiksi.

Mutta voimme myös sekoittaa malleja luomalla uudelleenkäytettävän ja ylläpidettävän koodin, esimerkiksi sekoittamalla sovittimeemme strategiamalliin. Emme oikeastaan ​​tarvitse korttiobjektia, tarvitsemme vain viimeisimmät numerot, joten miksi emme luo protokollaa tehdäksesi niin ja olemme yhteensopivia PKPaymentPassin, kortin ja minkä tahansa muun objektin kanssa, jota projektimme voi tarvita.

vihdoin

Suunnittelumallit auttavat minua luomaan uudelleenkäytettäviä koodeja, säästävät minulta aikaa, kun jouduin vaihtamaan joitain juttuja koodeihin ja niiden takia jotkut tehtävät ovat paljon helpompia kuin niiden pitäisi olla.

Jos et tiedä miten mallit toimivat täällä, on hienoja viestejä strategiasta, tehtaasta, sisustajasta ja sovittimesta.

Ps: Jos pidät tästä viestistä, jaa se Twitterissä, suosittele sitä keskipitkälle tai molemmille =). Tämä auttaa minua tavoittamaan enemmän ihmisiä. Kiitos paljon.