7 najpomembnejših vzorcev programske opreme

Če želite temeljito poglobiti temo vzorcev programske opreme, si oglejte Vzorci oblikovanja programske opreme: Najboljše prakse za razvijalce, ki jih je ustvaril C.H. Afzal, veteranski programski inženir z večletnimi izkušnjami v Netflixu, Microsoftu in Oracleu. Veliko spodaj je povzeto iz njegovega tečaja.

Zakaj oblikovanje vzorcev?

Vzorci oblikovanja so postali predmet polemike v programskem svetu v zadnjem času, predvsem zaradi njihove zaznane "prekomerne uporabe", ki vodi do kode, ki jo je težje razumeti in upravljati.

Pomembno je razumeti, da oblikovalski vzorci niso bili nikoli nameščeni, da bi bili zbrani bližnjične bližnjice, da bi jih uporabili na nenavaden način, "ena za vse" v kodo. Resnično ne more nadomestiti resnične sposobnosti reševanja problemov v programskem inženiringu.

Kljub temu ostaja dejstvo, da so lahko vzorci oblikovanja neverjetno uporabni, če jih uporabljamo v pravih situacijah in iz pravih razlogov. Če se strateško uporabljajo, lahko programerja naredijo bistveno učinkovitejšega, saj jim omogočijo, da se izognejo ponovnemu izumljanju pregovornega kolesa, namesto da uporabijo metode, ki so jih že izpopolnili drugi. Prav tako nudijo uporaben skupni jezik za zasnovo ponavljajočih se težav in rešitev pri pogovoru z drugimi ali upravljanju kode v večjih skupinah.

Pomembno opozorilo je zagotoviti, da razvijalec razume, kako in zakaj za vsakim vzorcem.

Brez dodatnega oboževanja (v splošnem zaporedju pomembnosti, od večine do najmanj):

Najpomembnejši vzorci oblikovanja

  1. Singleton

Vzorec singleton se uporablja za omejevanje ustvarjanja razreda le na en predmet. To je koristno, kadar je potreben en (in samo en) objekt za usklajevanje dejanj po sistemu. Obstaja več primerov, kjer naj bi obstajal le en primerek razreda, vključno s predpomnilniki, nizi niti in registri.

Inicializirati predmet razreda je nepomembno, kako pa zagotovimo, da se ustvari samo en predmet? Odgovor je, da konstruktor naredimo kot zaseben razredu, ki ga nameravamo definirati kot singl. Tako lahko do zasebnega konstruktorja dostopajo samo člani razreda in nihče drug.

Pomembno: Upoštevati je mogoče singletonton, če je konstruktor zaščiten namesto zasebnega. To bi bilo morda v nekaterih okoliščinah primerno. Eden od pristopov, uporabljenih v teh scenarijih, je ustvariti register singletons podklasov in metoda getInstance lahko v parametru vzame ali uporabi spremenljivko okolja, da vrne želeni singleton. Nato register vzdržuje preslikavo imen nizov v posamezne objekte, do katerih lahko dostopate po potrebi.

2. Tovarniška metoda

Običajna tovarna proizvaja blago; tovarna programske opreme proizvaja predmete. In ne samo to - to se naredi, ne da bi natančno določili razred predmeta, ki ga je treba ustvariti. Da bi to dosegli, predmeti nastanejo tako, da pokličejo tovarniško metodo, namesto da bi klicali konstruktor.

Običajno ustvarjanje predmetov na Javi poteka tako:

SomeClass someClassObject = nov SomeClass ();

Težava zgornjega pristopa je, da koda, ki uporablja objekt SomeClass, nenadoma postane odvisna od konkretne implementacije SomeClass. Z ustvarjanjem novih predmetov za ustvarjanje predmetov ni nič narobe, prihaja pa s prtljago, ki tesno poveže našo kodo s konkretnim izvedbenim razredom, kar je občasno lahko problematično.

3. Strategija

Vzorec strategije omogoča združevanje povezanih algoritmov pod abstrakcijo, kar omogoča izklop enega algoritma ali politike za drugega brez spreminjanja odjemalca. Namesto neposredne implementacije enega algoritma koda prejme navodila za izvajanje, ki določajo, katero od skupin algoritmov zagnati.

4. Opazovalec

Ta vzorec je odvisnost med mnogimi predmeti, tako da ko en predmet spremeni stanje, se obvestijo vsi njegovi vzdrževani člani. Običajno to storijo tako, da pokličejo eno od njihovih metod.

Zaradi preprostosti razmislite, kaj se zgodi, ko nekoga spremljate na Twitterju. V bistvu prosite, da Twitter pošlje (opazovalcu) tvit posodobitve osebe (predmeta), ki ste ji sledili. Vzorec sestavljata dva akterja, opazovalec, ki ga zanimajo posodobitve, in subjekt, ki generira posodobitve.

Predmet ima lahko veliko opazovalcev in je odnos med mnogimi. Opazovalec pa se lahko naroči na posodobitve tudi od drugih tem. Na vir novice se lahko naročite s Facebook strani, ki bi bila tema, in kadar ima stran novo objavo, bi naročnik videl novo objavo.

Ključna ugotovitev: Če veliko subjektov in malo opazovalcev, če vsak subjekt shrani svoje opazovalce ločeno, se bodo stroški skladiščenja povečali, saj bodo nekateri subjekti istega opazovalca hranili večkrat.

5. Builder

Kot pove že ime, se za gradnjo predmetov uporablja vzorec graditelja. Včasih so predmeti, ki jih ustvarimo, lahko zapleteni, sestavljeni iz več podpredmetov ali pa zahtevajo zahteven gradbeni postopek. Vajo ustvarjanja zapletenih vrst je mogoče poenostaviti z uporabo gradbenega vzorca. Sestavljeni ali sestavljeni objekt je tisto, kar graditelj na splošno gradi.

Ključni premislek: Vzorec graditelja se morda zdi podoben vzorcu 'abstraktne tovarne', vendar je ena razlika v tem, da vzorec graditelja ustvari predmet korak za korakom, medtem ko abstraktni tovarniški vzorec predmet vrne v enem samem koraku.

6. Adapter

To omogoča, da nezdružljivi razredi delujejo skupaj s pretvorbo vmesnika enega razreda v drugega. Pomislite na to kot na neke vrste prevajalca: ko se dva predsednika držav, ki ne govorita skupnega jezika, običajno tolmač sedi med njima in prevede pogovor, s čimer omogoči komunikacijo.

Če imate dve aplikaciji, pri čemer ena izpusti izhod kot XML, druga pa potrebuje vhod JSON, potem potrebujete adapter med obema, da lahko brezhibno delujeta.

7. država

Vzorec stanja zajema različna stanja, v katerih je stroj, in omogoča predmetu, da spremeni svoje vedenje, ko se spremeni njegovo notranje stanje. Stroj ali kontekst, kot se imenuje v vzorcu, lahko na njem izvajata dejanja, ki ga poganjajo v različna stanja. Brez uporabe vzorca koda postane neprožna in polna pogojev, če sicer.

Želite še naprej učiti?

Z vzorci oblikovanja programske opreme: Najboljše prakse za razvijalce boste imeli veliko več kot le prebrati teorijo. Zmogli boste globoko v resnične težave in razumeli praktične rešitve s primeri iz resničnega življenja.

Tečaj temelji na priljubljeni knjigi Gang of Four, vendar je predstavljen v interaktivni, lahko prebavljivi obliki. Interaktivno boste obvladali 23 znanih oblikovalskih vzorcev iz knjige, se naučili pravilnih aplikacij treh ključnih tipov oblikovalskih vzorcev (kreativni, strukturni in vedenjski) in se naučili vključiti te oblikovalske vzorce v lastne projekte.

Oglejte si zdaj.

Prvotno objavljeno na blog.educative.io 7. novembra 2018.