Disainimuster

Tarkvaraarenduses on disainimuster selgelt määratletud abstraktne lahendus mingile levinud probleemile tarkvaradisaini kontekstis. Iga disainimuster on mõeldud kasutamiseks mingi kindla tarkvara disainiga seotud probleemi kontekstis. Disainimustreid võib kirjeldada kui üldistatud kuju sarnastest lahendusest kindlale probleemile. 

Disainimustriga kaasneb kirjeldus kõikidest mustris sisalduvatest tarkvarakomponentidest, nende rollidest, vastutusaladest ja omavahelisest koostööst. Samuti on disainimustriga kirjeldatud, kus ja millal on sobilik seda kasutada, kuidas see suhestub muude tarkvara disaini kaalutlustega ning selle mustri kasutamisega kaasnevad hüved ja pahed.

Komponendid 
Gamma jt (1994) esitavad disainimustri kui koosluse neljast komponendist:

 Nimi. Hästi valitud nimi aitab luua esmase arusaama disainimustri eesmärgist ja töömehhanismist. Samuti annab nimi pidepunkti, et mustrile viidata, hõlbustades suhtlust kolleegidega ja tarkvarakomponentide tekstilist kirjeldamist.
 Probleemikirjeldus üldises vormis, mis loob arusaama, mis probleemi võimaldab disainimuster lahendada või ennetada. Kirjeldusest peaks tekkima ettekujutus, millal ja miks disainimustrit kasutada.
 Lahendus. Eelnevalt kirjeldatud probleemi lahendus peab kirjeldama disainimustri kõigi tarkvarakomponentide struktuuri, suhteid, vastutusi ja koostöövooge. Siinkohal on oluline, et lahenduse kirjeldus poleks liiga spetsiifiline (nt fikseeritud teostusega), vaid abstraktsel tasemel, sest disainimuster peaks olema rakendatav mitmetes erinevates olukordades.
 Tagajärjed. Tagajärjed peaks selgitama, mis positiivsed ja/või negatiivsed tagajärjed võivad tekkida, kui süsteemi disainimuster sisse tuua. Tagajärgede hulka võib kuuluda näiteks mingi operatsiooni ajalise keerukuse suurenemine, aga samas süsteemi paindlikkuse suurenemine. Disainimuster, mis on parim lahendus probleemile ühes tarkvarasüsteemis, ei pruugi olla parim lahendus samale probleemile teises tarkvarasüsteemis.

Hüved 
Disainimustrid hõlbustavad kasulike lahenduste taaskasutamist, aidates valida võimalike lahenduste hulgast sellise, mis aitab enim suurendada süsteemi taaskasutatavust. Samuti võib disainimustrite kasutamine suurendada koodi mõistetavust ja sellega panustada tarkvara hooldatavusesse, kuna disainimustriga kaasnev nimetus tarkvarakomponendile (nt klassi nimi objektorienteeritud kontekstis) kommunikeerib selle vastutusvaldkonda ja töömehhanismi disainimustriga tuttavale lugejale.

Pahed 
Disainimustrite üleliigne kasutamine võib mõjuda lähtekoodi kvaliteedile negatiivselt. Disainimustrite vales olukorras või valesti kasutamine võib suurendada lähtekoodi keerukust, vähendades loetavust ja süsteemi hallatavust.

Vajadus disainimustri järele võib tekkida ka asjaolust, et programmeerimiskeeles on puudu teatud funktsionid, mille puudumise kompenseerimiseks on välja kujunenud disainimuster. Seda tõendab see, et mõnes keeles esinevad disainimustrid pole teistes keeltes vajalikud, kuna on seal väljendatavad mõne võtmesõna või sisseehitatud funktsionidega.

Viited 

Tarkvaraarendus
Tarkvara
Programmeerimine