Ang 7 Pinakahahalagang Mga pattern ng Disenyo ng Software

Para sa isang komprehensibong malalim na pagsisid sa paksa ng Mga Disenyo ng Software ng Software, tingnan ang Mga Disenyo ng Software ng Software: Pinakamahusay na Kasanayan para sa Mga Nag-develop, nilikha ng C.H. Si Afzal, isang beteranong software engineer na may maraming taon na karanasan sa Netflix, Microsoft, at Oracle. Karamihan sa mga nasa ibaba ay buod mula sa kanyang kurso.

Bakit ang Mga Disenyo ng Disenyo?

Ang mga Disenyo ng Disenyo ay naging isang bagay ng ilang kontrobersya sa mundo ng pagprograpiya sa mga nagdaang panahon, higit sa lahat dahil sa kanilang napagtanto na 'over-use' na humahantong sa code na maaaring mas mahirap maunawaan at pamahalaan.

Mahalagang maunawaan na ang Mga Disenyo ng Disenyo ay hindi kailanman sinadya upang mai-hack nang magkasama ang mga shortcut na mailalapat sa isang kamangha-manghang, 'para sa isang laki-sukat-lahat' sa iyong code. Sa huli ay walang kapalit para sa tunay na kakayahan sa paglutas ng problema sa software engineering.

Ang katotohanan ay nananatiling, gayunpaman, na ang Mga Disenyo ng Disenyo ay maaaring maging kapani-paniwalang kapaki-pakinabang kung ginamit sa tamang mga sitwasyon at para sa tamang mga kadahilanan. Kapag ginamit nang madiskarteng, maaari silang gumawa ng isang programmer na makabuluhang mas mahusay sa pamamagitan ng pagpapahintulot sa kanila na maiwasan ang muling pagbuo ng kasabihan na gulong, sa halip ay gumagamit ng mga pamamaraan na pino na ng iba. Nagbibigay din sila ng isang kapaki-pakinabang na karaniwang wika upang ma-conceptualize ang paulit-ulit na mga problema at solusyon kapag tinatalakay sa iba o pamamahala ng code sa mas malaking koponan.

Na sinasabi, isang mahalagang caveat ay upang matiyak na kung paano at kung bakit sa likod ng bawat pattern ay naiintindihan din ng nag-develop.

Nang walang karagdagang ado (sa pangkalahatang pagkakasunud-sunod ng kahalagahan, mula sa halos lahat):

Ang Pinaka Mahalagang Mga pattern ng Disenyo

  1. Singleton

Ang pattern ng singleton ay ginagamit upang limitahan ang paglikha ng isang klase sa isang bagay lamang. Ito ay kapaki-pakinabang kapag ang isang (at isa lamang) bagay ay kinakailangan upang ayusin ang mga aksyon sa buong sistema. Mayroong ilang mga halimbawa kung saan dapat lamang umiiral ang isang solong halimbawa ng isang klase, kabilang ang mga cache, pool pool, at mga rehistro.

Hindi mahalaga na simulan ang isang bagay ng isang klase - ngunit paano natin masisiguro na isang bagay lamang ang nilikha? Ang sagot ay upang gawing pribado ang konstruktor 'sa klase na nais naming tukuyin bilang isang singleton. Sa ganoong paraan, ang mga miyembro lamang ng klase ang makakapasok sa pribadong tagapagtayo at wala nang iba.

Mahalagang pagsasaalang-alang: Posible na i-subclass ang singleton sa pamamagitan ng pagprotekta sa konstruktor sa halip na pribado. Maaaring angkop ito sa ilalim ng ilang mga pangyayari. Ang isang diskarte na kinuha sa mga sitwasyong ito ay upang lumikha ng isang rehistro ng mga singleton ng mga subclass at ang pamamaraan ng getInstance ay maaaring tumagal sa isang parameter o gumamit ng variable ng kapaligiran upang maibalik ang nais na singleton. Ang rehistro pagkatapos ay nagpapanatili ng isang pagmamapa ng mga pangalan ng string sa mga singleton na mga bagay, na ma-access kung kinakailangan.

2. Paraan ng Pabrika

Ang isang normal na pabrika ay gumagawa ng mga kalakal; isang pabrika ng software ang gumagawa ng mga bagay. At hindi lamang iyon - ginagawa nito nang hindi tinukoy ang eksaktong klase ng bagay na malilikha. Upang maisakatuparan ito, ang mga bagay ay nilikha sa pamamagitan ng pagtawag ng isang pamamaraan ng pabrika sa halip na pagtawag ng isang tagabuo.

Karaniwan, ang paglikha ng object sa Java ay nagaganap tulad ng:

SomeClass someClassObject = new SomeClass ();

Ang problema sa diskarte sa itaas ay ang code gamit ang object ng SomeClass, biglang ngayon ay umaasa sa kongkreto na pagpapatupad ng SomeClass. Walang mali sa paggamit ng bago upang lumikha ng mga bagay ngunit ito ay dala ng mga bagahe ng mahigpit na pagsasama ng aming code sa klase ng pagpapatupad ng kongkreto, na kung minsan ay may problema.

3. Diskarte

Ang pattern ng diskarte ay nagbibigay-daan sa mga kaugnay na mga algorithm sa ilalim ng isang abstraction, na nagpapahintulot sa paglipat ng isang algorithm o patakaran para sa isa pang walang pagbabago ng kliyente. Sa halip na direktang nagpapatupad ng isang solong algorithm, natatanggap ng code ang mga tagubilin ng runtime na tinukoy kung alin sa pangkat ng mga algorithm ang tatakbo.

4. Tagamasid

Ang pattern na ito ay isang one-to-maraming dependant sa pagitan ng mga bagay upang kapag ang isang bagay ay nagbabago ng estado, ang lahat ng mga dependents ay inaalam. Ito ay karaniwang ginagawa sa pamamagitan ng pagtawag sa isa sa kanilang mga pamamaraan.

Para sa pagiging simple, isipin ang kung ano ang mangyayari kapag sumunod ka sa isang tao sa Twitter. Mahalagang hinihiling mo sa Twitter na magpadala sa iyo (ang tagamasid) na mga pag-update ng tweet ng taong (ang paksa) na iyong sinundan. Ang pattern ay binubuo ng dalawang aktor, ang tagamasid na interesado sa mga update at paksa na bumubuo ng mga update.

Ang isang paksa ay maaaring magkaroon ng maraming mga tagamasid at isa sa maraming relasyon. Gayunpaman, ang isang tagamasid ay libre upang mag-subscribe sa mga update mula sa iba pang mga paksa. Maaari kang mag-subscribe sa news feed mula sa isang pahina ng Facebook, na magiging paksa at kung kailan may bagong post ang pahina, makikita ng tagasuskribi ang bagong post.

Pangunahing pagsasaalang-alang: Kung sakaling maraming mga paksa at kakaunti ang mga nagmamasid, kung ang bawat paksa ay nag-iimbak nang magkahiwalay ang mga tagamasid, tataas ang mga gastos sa pag-iimbak habang ang ilang mga paksa ay mag-iimbak ng parehong tagamasid ng maraming beses.

5. Tagabuo

Tulad ng ipinahihiwatig ng pangalan, ginagamit ang isang pattern ng tagabuo upang makabuo ng mga bagay. Minsan, ang mga bagay na nilikha namin ay maaaring maging kumplikado, na binubuo ng maraming mga sub-bagay o nangangailangan ng isang masalimuot na proseso ng konstruksiyon. Ang ehersisyo ng paglikha ng mga kumplikadong uri ay maaaring gawing simple sa pamamagitan ng paggamit ng pattern ng tagabuo. Ang isang pinagsama o isang pinagsama-samang bagay ay kung ano ang karaniwang itinatayo ng isang tagabuo.

Pangunahing pagsasaalang-alang: Ang pattern ng tagabuo ay maaaring mukhang katulad sa pattern ng 'abstract pabrika' ngunit ang isang pagkakaiba ay ang pattern ng tagabuo ay lumilikha ng isang hakbang na hakbang habang ang abstract pattern ng pabrika ay nagbabalik ang bagay sa isang lakad.

6. adaptor

Pinapayagan nitong hindi magkatugma ang mga klase upang magtulungan sa pamamagitan ng pag-convert ng interface ng isang klase sa isa pa. Isipin ito bilang isang uri ng tagasalin: kapag ang dalawang pinuno ng mga estado na hindi nagsasalita ng isang pangkaraniwang pulong ng wika, kadalasang isang tagasalin ay nakaupo sa pagitan ng dalawa at isinasalin ang pag-uusap, sa gayon pinapagana ang komunikasyon.

Kung mayroon kang dalawang aplikasyon, na may isang pag-iwas ng output bilang XML kasama ang iba pang nangangailangan ng pag-input ng JSON, kakailanganin mo ng adapter sa pagitan ng dalawa upang gawin silang gumagana nang walang putol.

7. Estado

Ang pattern ng estado ay sumasama sa iba't ibang mga estado ang isang makina ay maaaring maging, at pinapayagan ang isang bagay na baguhin ang pag-uugali nito kapag nagbabago ang panloob na estado. Ang makina o konteksto, tulad ng tawag sa pattern-speak, ay maaaring magkaroon ng mga aksyon na gawin ito na humihimok sa iba't ibang estado. Nang walang paggamit ng pattern, ang code ay nagiging hindi nababaluktot at pinalamanan ng mga kung-ibang mga kondisyon.

Nais bang patuloy na matuto?

Sa Mga pattern ng Disenyo ng Software: Pinakamahusay na Mga Kasanayan para sa Mga Nag-develop ay magkakaroon ka ng pagkakataon na makagawa ng higit pa kaysa basahin lamang ang teorya. Magagawa mong sumisid sa malalim na mga tunay na problema at maunawaan ang mga praktikal na solusyon sa mga halimbawa ng code ng totoong buhay.

Ang kurso ay batay sa tanyag na libro ng Gang of Four, ngunit ipinakita sa isang interactive, madaling-digest na format. Masusuportahan mo ang 23 sikat na mga pattern ng disenyo mula sa libro nang interactive, alamin ang wastong aplikasyon ng 3 pangunahing mga uri ng pattern ng disenyo (pagkamalikhain, istruktura, at pag-uugali), at matutong isama ang mga pattern ng disenyo sa iyong sariling mga proyekto.

Suriin ito ngayon.

Orihinal na nai-publish sa blog.educative.io noong Nobyembre 7, 2018.