Softwarový návrhový vzor - Software design pattern
v softwarové inženýrství, a vzor návrhu softwaru je generál, znovu použitelný řešení běžně se vyskytujícího problému v daném kontextu v softwarový design. Nejedná se o hotový design, který lze přímo transformovat zdroj nebo strojový kód. Jedná se spíše o popis nebo šablonu, jak vyřešit problém, který lze použít v mnoha různých situacích. Návrhové vzory jsou formalizovány osvědčené postupy které může programátor použít k řešení běžných problémů při navrhování aplikace nebo systému.
Objektově orientovaný návrhové vzory obvykle ukazují vztahy a interakce mezi třídy nebo předměty, aniž byste specifikovali konečné třídy aplikací nebo objekty, kterých se to týká. Pro vzory, které naznačují proměnlivý stav, nemusí být vhodné Funkcionální programování jazyky, některé vzory mohou být zbytečné v jazycích, které mají integrovanou podporu pro řešení problému, který se snaží vyřešit, a objektově orientované vzory nemusí být nutně vhodné pro neobjektové jazyky.
Na návrhové vzory lze pohlížet jako na strukturovaný přístup k programování mezi úrovněmi a paradigma programování a beton algoritmus.
V nedávné revizní studii Wedyan a Abufakher zkoumali designové vzory a kvalita softwaru a uzavřít: „Naše studie ukázala, že primární studie poskytují empirické důkazy o pozitivním vlivu dokumentace vzorů instancí návrhů na porozumění programu, a tedy na udržovatelnost. I když tento výsledek není překvapující, má však dvě indikace. by mělo věnovat větší úsilí přidání takové dokumentace, i když ve formě jednoduchých komentářů ve zdrojovém kódu. Zadruhé, při porovnávání výsledků různých studií je třeba vzít v úvahu účinek dokumentace. “[1]
Dějiny
Vzory vznikly jako architektonický koncept podle Christopher Alexander již v roce 1966 (srov. „The Pattern of Streets“, JOURNAL OF AIP, září 1966, sv. 32, č. 3, str. 273-278). V roce 1987 Kent Beck a Ward Cunningham začal experimentovat s myšlenkou použití vzorů na programování - konkrétně vzorové jazyky - a prezentovali své výsledky na OOPSLA konference toho roku.[2][3] V následujících letech na tuto práci navázali Beck, Cunningham a další.
Designové vzory získaly popularitu v počítačová věda po knize Návrhové vzory: Prvky opakovaně použitelného objektově orientovaného softwaru byl publikován v roce 1994 takzvaným „Gangem čtyř“ (Gamma et al.), který je často zkrácen jako „GoF“. Ten stejný rok, první Vzorové jazyky programování Konala se konference a následující rok se konala konference Portlandské úložiště vzorů byl nastaven pro dokumentaci návrhových vzorů. Rozsah tohoto pojmu zůstává předmětem sporu. Pozoruhodné knihy žánru návrhových vzorů zahrnují:
- Gamma, Erichu; Kormidlo, Richarde; Johnson, Ralph; Vlissides, Johne (1995). Návrhové vzory: Prvky opakovaně použitelného objektově orientovaného softwaru. Addison-Wesley. ISBN 978-0-201-63361-0.
- Brinch Hansen, Per (1995). Studies in Computational Science: Parallel Programming Paradigms. Prentice Hall. ISBN 978-0-13-439324-7.
- Buschmann, Frank; Meunier, Regine; Rohnert, Hans; Sommerlad, Peter (1996). Softwarová architektura orientovaná na vzory, svazek 1: Systém vzorů. John Wiley & Sons. ISBN 978-0-471-95869-7.
- Beck, Kent (1997). Vzorky osvědčených postupů Smalltalk. Prentice Hall. ISBN 978-0134769042.
- Schmidt, Douglas C.; Stal, Michael; Rohnert, Hans; Buschmann, Frank (2000). Softwarová architektura orientovaná na vzory, svazek 2: Vzory pro souběžné a síťové objekty. John Wiley & Sons. ISBN 978-0-471-60695-6.
- Fowler, Martin (2002). Vzory podnikové aplikační architektury. Addison-Wesley. ISBN 978-0-321-12742-6.
- Hohpe, Gregor; Woolf, Bobby (2003). Vzory podnikové integrace: Návrh, stavba a nasazení řešení pro zasílání zpráv. Addison-Wesley. ISBN 978-0-321-20068-6.
- Freeman, Eric T; Robson, Elisabeth; Bates, Bert; Sierra, Kathy (2004). Hlava první návrhové vzory. O'Reilly Media. ISBN 978-0-596-00712-6.
Ačkoli se návrhové vzory používají prakticky po dlouhou dobu, formalizace konceptu návrhových vzorů se na několik let vytrácí.[4]
Praxe
Návrhové vzory mohou urychlit proces vývoje poskytnutím testovaných a osvědčených vývojových paradigmat.[5] Efektivní návrh softwaru vyžaduje zvážení problémů, které se mohou stát viditelnými až později v implementaci. Čerstvě napsaný kód může často mít skryté jemné problémy, jejichž detekce si vyžaduje čas, problémy, které někdy mohou způsobit velké problémy. Opětovné použití návrhových vzorů pomáhá těmto jemným problémům předcházet[Citace je zapotřebí ]a také zlepšuje čitelnost kódu pro programátory a architekty, kteří jsou obeznámeni se vzory.
Aby se dosáhlo flexibility, návrhové vzory obvykle zavádějí další úrovně indirection, což v některých případech může komplikovat výsledné návrhy a poškodit výkon aplikace.
Podle definice musí být vzor naprogramován znovu do každé aplikace, která jej používá. Někteří autoři to považují za krok zpět od opětovné použití softwaru jak poskytuje komponenty, vědci pracovali na přeměně vzorů na komponenty. Meyer a Arnout byli schopni zajistit úplnou nebo částečnou komponentizaci dvou třetin vzorů, o které se pokusili.[6]
Techniky softwarového designu je obtížné aplikovat na širší škálu problémů.[Citace je zapotřebí ] Návrhové vzory poskytují obecná řešení, zdokumentováno ve formátu, který nevyžaduje specifika spojená s konkrétním problémem.
Struktura
Návrhové vzory se skládají z několika částí (viz § Dokumentace níže). Zvláště zajímavé jsou sekce Struktura, Účastníci a Spolupráce. Tyto oddíly popisují a designový motiv: prototyp mikroarchitektura které vývojáři kopírují a přizpůsobují svým konkrétním návrhům, aby vyřešili opakující se problém popsaný vzorem návrhu. Mikroarchitektura je sada programových složek (např. Tříd, metod ...) a jejich vztahů. Vývojáři používají návrhový vzor zavedením této prototypové mikroarchitektury do svých návrhů, což znamená, že mikroarchitektury ve svých návrzích budou mít strukturu a organizaci podobnou zvolenému motivu návrhu.
Vzory specifické pro doménu
Bylo rovněž vyvinuto úsilí ke kodifikaci návrhových vzorů v konkrétních doménách, včetně použití stávajících návrhových vzorů i návrhových vzorů specifických pro doménu. Mezi příklady patří uživatelské rozhraní designové vzory,[7] informační vizualizace,[8] bezpečný design,[9] "bezpečná použitelnost",[10] webový design [11] a design obchodního modelu.[12]
Roční Vzorové jazyky programování Sborník z konference [13] obsahují mnoho příkladů vzorů specifických pro doménu.
Klasifikace a seznam
Návrhové vzory byly původně kategorizovány do 3 subklasifikací na základě druhu problému, který řeší. Tvůrčí vzory poskytnout schopnost vytvářet objekty na základě požadovaného kritéria a kontrolovaným způsobem. Strukturální vzory jde o organizování různých tříd a objektů za účelem vytvoření větších struktur a poskytnutí nových funkcí. Konečně, vzorce chování jde o identifikaci společných komunikačních vzorů mezi objekty a jejich realizaci.
Tvůrčí vzory
název | Popis | v Designové vzory | v Kód dokončen[14] | jiný |
---|---|---|---|---|
Abstraktní továrna | Poskytněte rozhraní pro vytváření rodiny souvisejících nebo závislých objektů bez určení jejich konkrétních tříd. | Ano | Ano | N / A |
Stavitel | Oddělte konstrukci složitého objektu od jeho reprezentace, což umožňuje stejnému konstrukčnímu procesu vytvářet různé reprezentace. | Ano | Ne | N / A |
Injekce závislostí | Třída přijímá objekty, které vyžaduje od injektoru, místo aby je přímo vytvářela. | Ne | Ne | N / A |
Tovární metoda | Definujte rozhraní pro vytvoření a singl objekt, ale nechte podtřídy rozhodnout, kterou třídu vytvořit instanci. Tovární metoda umožňuje třídě odložit instanci na podtřídy. | Ano | Ano | N / A |
Líná inicializace | Taktika zpoždění vytvoření objektu, výpočtu hodnoty nebo nějakého jiného nákladného procesu, dokud to není poprvé potřeba. Tento vzor se v katalogu GoF zobrazuje jako "virtuální proxy", implementační strategie pro Proxy vzor. | Ne | Ne | PoEAA[15] |
Multiton | Zajistěte, aby třída měla pouze pojmenované instance, a poskytněte k nim globální přístupový bod. | Ne | Ne | N / A |
Fond objektů | Vyvarujte se nákladného získávání a uvolňování zdrojů recyklací předmětů, které se již nepoužívají. Lze považovat za zobecnění fond připojení a fond vláken vzory. | Ne | Ne | N / A |
Prototyp | Určete druhy objektů, které se mají vytvořit pomocí prototypové instance, a vytvořte nové objekty z „kostry“ existujícího objektu, čímž zvýšíte výkon a minimalizujete paměťové stopy. | Ano | Ne | N / A |
Získávání zdrojů je inicializace (RAII) | Zajistěte, aby byly prostředky správně uvolněny, a to vázáním na dobu životnosti vhodných objektů. | Ne | Ne | N / A |
jedináček | Zajistěte, aby třída měla pouze jednu instanci, a poskytněte k ní globální přístupový bod. | Ano | Ano | N / A |
Strukturální vzory
název | Popis | v Designové vzory | v Kód dokončen[14] | jiný |
---|---|---|---|---|
Adaptér, Obálka nebo překladač | Převeďte rozhraní třídy na jiné rozhraní, které klienti očekávají. Adaptér umožňuje třídám pracovat společně, které by jinak kvůli nekompatibilním rozhraním nemohly. Ekvivalentem vzoru podnikové integrace je překladač. | Ano | Ano | N / A |
Most | Oddělte abstrakci od její implementace a umožněte těmto dvěma nezávisle se měnit. | Ano | Ano | N / A |
Složený | Skládejte objekty do stromových struktur, které představují hierarchie celého celku. Kompozitní umožňuje klientům zacházet s jednotlivými objekty a kompozicemi objektů jednotně. | Ano | Ano | N / A |
Natěrač | Připojte další odpovědnosti k objektu dynamicky udržujícím stejné rozhraní. Dekorátoři poskytují flexibilní alternativu k podtřídě pro rozšíření funkčnosti. | Ano | Ano | N / A |
Objekt rozšíření | Přidání funkčnosti do hierarchie bez změny hierarchie. | Ne | Ne | Agilní vývoj softwaru, principy, vzory a postupy[16] |
Fasáda | Poskytněte jednotné rozhraní pro sadu rozhraní v subsystému. Fasáda definuje rozhraní vyšší úrovně, které usnadňuje používání subsystému. | Ano | Ano | N / A |
Muší váha | Pomocí sdílení můžete efektivně podporovat velké množství podobných objektů. | Ano | Ne | N / A |
Přední ovladač | Vzor se vztahuje k designu webových aplikací. Poskytuje centralizovaný vstupní bod pro zpracování požadavků. | Ne | Ne | |
Popisovač | Prázdné rozhraní pro přidružení metadat ke třídě. | Ne | Ne | Efektivní Java[19] |
Modul | Seskupte několik souvisejících prvků, jako jsou třídy, singletony, metody, globálně používané, do jedné koncepční entity. | Ne | Ne | N / A |
Proxy | Poskytněte náhradní nebo zástupný symbol pro jiný objekt, který bude řídit přístup k němu. | Ano | Ne | N / A |
Dvojče [20] | Twin umožňuje modelování vícenásobné dědičnosti v programovacích jazycích, které tuto funkci nepodporují. | Ne | Ne | N / A |
Vzory chování
název | Popis | v Designové vzory | v Kód dokončen[14] | jiný |
---|---|---|---|---|
Černá tabule | Umělá inteligence vzor pro kombinování různorodých zdrojů dat (viz systém tabule ) | Ne | Ne | N / A |
Řetěz odpovědnosti | Vyhněte se propojení odesílatele požadavku s jeho příjemcem tím, že dáte více než jednomu objektu šanci tento požadavek zpracovat. Zřetězit přijímající objekty a předat požadavek podél řetězce, dokud s ním objekt nezpracuje. | Ano | Ne | N / A |
Příkaz | Zapouzdřit požadavek jako objekt, což umožňuje parametrizaci klientů s různými požadavky a zařazování do fronty nebo protokolování požadavků. Umožňuje také podporu nevratných operací. | Ano | Ne | N / A |
Tlumočník | Vzhledem k jazyku definujte reprezentaci jeho gramatiky spolu s tlumočníkem, který používá reprezentaci k interpretaci vět v jazyce. | Ano | Ne | N / A |
Iterátor | Poskytněte způsob přístupu k prvkům agregát objekt postupně bez vystavení jeho podkladové reprezentace. | Ano | Ano | N / A |
Prostředník | Definujte objekt, který zapouzdřuje způsob interakce sady objektů. Mediátor propaguje volné spojení tím, že brání objektům v výslovném vzájemném odkazování, a umožňuje jejich vzájemné ovlivňování nezávisle se měnit. | Ano | Ne | N / A |
Memento | Bez porušení zapouzdření zachyťte a externalizujte vnitřní stav objektu, což umožní, aby byl objekt do tohoto stavu obnoven později. | Ano | Ne | N / A |
Nulový objekt | Vyhněte se nulovým odkazům poskytnutím výchozího objektu. | Ne | Ne | N / A |
Pozorovatel nebo Publikovat / přihlásit se k odběru | Definujte závislost jedna na více mezi objekty, kde změna stavu v jednom objektu vede k automatickému upozornění a aktualizaci všech jeho závislých osob. | Ano | Ano | N / A |
Služebník | Definujte společné funkce pro skupinu tříd. Služební vzor se také často nazývá pomocná třída nebo implementace třídy nástroje pro danou sadu tříd. Pomocné třídy obecně nemají žádné objekty, proto mají všechny statické metody, které působí na různé druhy třídních objektů. | Ne | Ne | N / A |
Specifikace | Rekombinovatelné obchodní logika v Booleovský móda. | Ne | Ne | N / A |
Stát | Povolit objektu změnit jeho chování, když se změní jeho vnitřní stav. Zdá se, že objekt mění svou třídu. | Ano | Ne | N / A |
Strategie | Definujte rodinu algoritmů, každý z nich zapouzdřte a zajistěte jejich vzájemnou zaměnitelnost. Strategie umožňuje, aby se algoritmus lišil nezávisle na klientech, kteří jej používají. | Ano | Ano | N / A |
Metoda šablony | Definujte kostru algoritmu v operaci a odložte některé kroky do podtříd. Metoda šablony umožňuje podtřídám předefinovat určité kroky algoritmu beze změny struktury algoritmu. | Ano | Ano | N / A |
Návštěvník | Představují operaci, která se má provést s prvky struktury objektu. Visitor umožňuje definovat novou operaci beze změny tříd prvků, na kterých pracuje. | Ano | Ne | N / A |
Souběžnost vzory
název | Popis | v POSA2[21] | jiný |
---|---|---|---|
Aktivní objekt | Odpojuje provádění metody od vyvolání metody, které se nachází v jejich vlastním vlákně kontroly. Cílem je zavést souběžnost pomocí asynchronní vyvolání metody a a plánovač pro vyřizování žádostí. | Ano | N / A |
Balking | Provedení akce na objektu, pouze když je objekt v určitém stavu. | Ne | N / A |
Vazební vlastnosti | Kombinace více pozorovatelů vynutí, aby byly vlastnosti v různých objektech nějakým způsobem synchronizovány nebo koordinovány.[22] | Ne | N / A |
Vypočítejte jádro | Stejný výpočet mnohokrát paralelně, lišící se celočíselnými parametry použitými s nerozvětvenou matematikou ukazatele do sdílených polí, jako například GPU -optimalizováno Násobení matic nebo Konvoluční neuronová síť. | Ne | N / A |
Dvojitě zkontrolované zamykání | Snižte režii získávání zámku tím, že nejdříve nebezpečným způsobem otestujete kritérium zamykání („nápověda zámku“); pouze pokud to bude úspěšné, bude pokračovat skutečná logika zamykání. Může být nebezpečný, pokud je implementován v některých jazykových / hardwarových kombinacích. Lze jej proto někdy považovat za anti-vzor. | Ano | N / A |
Asynchronní na základě událostí | Řeší problémy s asynchronním vzorem, ke kterým dochází ve vícevláknových programech.[23] | Ne | N / A |
Hlídané zavěšení | Spravuje operace, které vyžadují získání zámku a podmínku, která musí být splněna před provedením operace. | Ne | N / A |
Připojit se | Schéma spojení poskytuje způsob psaní souběžných, paralelních a distribuovaných programů předáváním zpráv. Ve srovnání s použitím vláken a zámků se jedná o programovací model na vysoké úrovni. | Ne | N / A |
Zámek | Jedno vlákno vloží „zámek“ na zdroj, čímž zabrání jiným vláknům v přístupu nebo k jeho úpravě.[24] | Ne | PoEAA[15] |
Návrhový vzor zpráv (MDP) | Umožňuje výměnu informací (tj. Zpráv) mezi komponentami a aplikacemi. | Ne | N / A |
Monitorujte objekt | Objekt, jehož metody podléhají vzájemné vyloučení, čímž se zabrání tomu, aby se několik objektů omylem pokusilo použít jej současně. | Ano | N / A |
Reaktor | Objekt reaktoru poskytuje asynchronní rozhraní k prostředkům, které musí být zpracovány synchronně. | Ano | N / A |
Zámek pro čtení a zápis | Umožňuje souběžný přístup ke čtení k objektu, ale vyžaduje výhradní přístup pro operace zápisu. | Ne | N / A |
Plánovač | Explicitně určete, kdy vlákna mohou spustit kód s jedním vláknem. | Ne | N / A |
Pool vláken | Řada vláken je vytvořena za účelem provedení řady úkolů, které jsou obvykle uspořádány do fronty. Obvykle existuje mnohem více úkolů než vláken. Lze považovat za zvláštní případ fond objektů vzor. | Ne | N / A |
Úložiště specifické pro vlákno | Statická nebo „globální“ lokální paměť pro vlákno. | Ano | N / A |
Dokumentace
Dokumentace k návrhovému vzoru popisuje kontext, ve kterém se vzor používá, síly v kontextu, které se vzor snaží vyřešit, a navrhované řešení.[25] Pro dokumentaci návrhových vzorů neexistuje jediný standardní formát. Spíše byla různými autory vzorů použita celá řada různých formátů. Nicméně podle Martin Fowler Některé formy vzorů se staly známějšími než jiné a následně se staly běžnými výchozími body pro nové snahy o psaní vzorů.[26] Jedním z příkladů běžně používaného formátu dokumentace je formát používaný Erich Gamma, Richard Helm, Ralph Johnson, a John Vlissides ve své knize Designové vzory. Obsahuje následující části:
- Název a klasifikace vzoru: Popisný a jedinečný název, který pomáhá při identifikaci a odkazování na vzor.
- Úmysl: Popis cíle za vzorem a důvod jeho použití.
- Také známý jako: Jiná jména vzoru.
- Motivace (síly): Scénář skládající se z problému a kontextu, ve kterém lze tento vzor použít.
- Použitelnost: Situace, ve kterých je tento vzor použitelný; kontext vzoru.
- Struktura: Grafické znázornění vzoru. Diagramy tříd a Interakční diagramy mohou být použity pro tento účel.
- Účastníci: Seznam tříd a objektů použitých ve vzoru a jejich rolí v návrhu.
- Spolupráce: Popis vzájemného působení tříd a objektů použitých ve vzoru.
- Důsledky: Popis výsledků, vedlejších účinků a kompromisů způsobených použitím vzoru.
- Implementace: Popis implementace vzoru; řešení část vzoru.
- Ukázkový kód: Ilustrace toho, jak lze vzor použít v programovacím jazyce.
- Známá použití: Příklady skutečných použití vzoru.
- Související vzory: Jiné vzory, které mají určitý vztah se vzorem; diskuse o rozdílech mezi vzorem a podobnými vzory.
Kritika
Bylo pozorováno, že návrhové vzory mohou být pouze známkou toho, že v daném programovacím jazyce chybí některé funkce (Jáva nebo C ++ například). Peter Norvig ukazuje, že 16 z 23 vzorů v Designové vzory Kniha (která je primárně zaměřena na C ++) je zjednodušena nebo odstraněna (prostřednictvím přímé jazykové podpory) v systému Windows Lisp nebo Dylan.[27] Související pozorování provedli Hannemann a Kiczales, kteří implementovali několik z 23 návrhových vzorů pomocí aspektově orientovaný programovací jazyk (AspectJ) a ukázal, že závislosti na úrovni kódu byly odstraněny z implementací 17 z 23 návrhových vzorů a že programování orientované na aspekt by mohlo zjednodušit implementaci návrhových vzorů.[28]Viz také Paul Graham esej "Pomsta pitomců".[29]
Nevhodné použití vzorů může zbytečně zvýšit složitost.[30]
Viz také
- Princip abstrakce
- Algoritmická kostra
- Anti-vzor
- Architektonický vzor
- Ladicí vzory
- Návrhový vzor
- Distribuované návrhové vzory
- Funkce dvojité šance
- Rámec Enterprise Architecture
- GRASP (objektově orientovaný design)
- Pomocná třída
- Interakční návrhový vzor
- Seznam filozofií vývoje softwaru
- Seznam témat softwarového inženýrství
- Vzorový jazyk
- Teorie vzorů
- Pedagogické vzorce
- Portlandské úložiště vzorů
- Refaktorování
- Metodika vývoje softwaru
Reference
- ^ Wedyan, Fadi; Abufakher, Somia (2020-02-01). „Dopad návrhových vzorů na kvalitu softwaru: systematický přehled literatury“. Software IET. 14 (1): 1–17. doi:10.1049 / iet-sen.2018.5446. ISSN 1751-8806.
- ^ Smith, Reid (říjen 1987). Panel pro metodologii designu. OOPSLA '87 Dodatek ke sborníku. doi:10.1145/62138.62151.
Ward varoval před požadavkem přílišného programování na „vysoké úrovni čarodějů“, jak nazval. Poukázal na to, že psaný „vzorový jazyk“ může významně zlepšit výběr a použití abstrakcí. Navrhl „radikální posun v břemenu designu a implementace“ založený na nové metodice na adaptaci práce Christophera Alexandra ve vzorových jazycích a na vzorově orientovaných vzorových jazycích vyvinutých na Tektronix významně pomohla jejich snahám o vývoj softwaru.
- ^ Beck, Kent; Cunningham, Ward (Září 1987). Používání vzorových jazyků pro objektově orientovaný program. OOPSLA '87 workshop na Specifikace a návrh objektově orientovaného programování. Citováno 2006-05-26.
- ^ Baroni, Aline Lúcia; Guéhéneuc, Yann-Gaël; Albin-Amiot, Hervé (červen 2003). "Formalizace návrhových vzorů". Nantes: École Nationale Supérieure des Techniques Industrielles et des Mines de Nantes. CiteSeerX 10.1.1.62.6466. Citovat deník vyžaduje
| deník =
(Pomoc) - ^ Bishop, Judith. „Návrhové vzory C # 3.0: Využijte sílu C # 3.0 k řešení problémů v reálném světě“. Knihy C # od O'Reilly Media. Citováno 2012-05-15.
Pokud chcete urychlit vývoj svých aplikací .NET, jste připraveni na návrhové vzory C # - elegantní, přijatelné a osvědčené způsoby řešení běžných programovacích problémů.
- ^ Meyer, Bertrand; Arnout, Karine (červenec 2006). „Componentization: The Visitor Example“ (PDF). Počítač IEEE. 39 (7): 23–30. CiteSeerX 10.1.1.62.6082. doi:10.1109 / MC.2006.227. S2CID 15328522.
- ^ Laakso, Sari A. (2003-09-16). "Sbírka návrhových vzorů uživatelského rozhraní". University of Helsinki, Department of Computer Science. Citováno 2008-01-31.
- ^ Heer, J .; Agrawala, M. (2006). „Softwarové návrhové vzory pro vizualizaci informací“. Transakce IEEE na vizualizaci a počítačové grafice. 12 (5): 853–60. CiteSeerX 10.1.1.121.4534. doi:10.1109 / TVCG.2006.178. PMID 17080809. S2CID 11634997.
- ^ Dougherty, Čad; Sayre, Kirk; Seacord, Robert C .; Svoboda, David; Togashi, Kazuya (2009). Bezpečné návrhové vzory (PDF). Institut softwarového inženýrství.
- ^ Garfinkel, Simson L. (2005). Zásady a vzory návrhu počítačových systémů, které jsou současně bezpečné a použitelné (Disertační práce).
- ^ "Yahoo! Knihovna návrhových vzorů". Archivovány od originál dne 29. 02. 2008. Citováno 2008-01-31.
- ^ „Jak navrhnout svůj obchodní model jako štíhlé spuštění?“. 2010-01-06. Citováno 2010-01-06.
- ^ Modelové jazyky programování, konferenční sborník (roční, 1994—) [1]
- ^ A b C McConnell, Steve (Červen 2004). "Design ve stavebnictví". Kód dokončen (2. vyd.). Microsoft Press. p.104. ISBN 978-0-7356-1967-8.
Tabulka 5.1 Populární návrhové vzory
- ^ A b Fowler, Martin (2002). Vzory podnikové aplikační architektury. Addison-Wesley. ISBN 978-0-321-12742-6.
- ^ C. Martin, Robert (2002). "28. Rozšiřující objekt". Agilní vývoj softwaru, principy, vzory a postupy. p.408. ISBN 978-0135974445.
- ^ Alur, Deepak; Crupi, John; Malks, Dan (2003). Core J2EE Patterns: Best Practices and Design Strategies. Prentice Hall. p. 166. ISBN 978-0-13-142246-9.
- ^ Fowler, Martin (2002). Vzory podnikové aplikační architektury. Addison-Wesley. p. 344. ISBN 978-0-321-12742-6.
- ^ Bloch, Joshua (2008). „Položka 37: Definování typů pomocí rozhraní značek“. Efektivní Java (Druhé vydání.). Addison-Wesley. p.179. ISBN 978-0-321-35668-0.
- ^ „Twin - návrhový vzor pro modelování vícenásobného dědictví“ (PDF).
- ^ Schmidt, Douglas C .; Stal, Michael; Rohnert, Hans; Buschmann, Frank (2000). Softwarová architektura orientovaná na vzory, svazek 2: Vzory pro souběžné a síťové objekty. John Wiley & Sons. ISBN 978-0-471-60695-6.
- ^ Vlastnosti vazby
- ^ Nagel, Christian; Evjen, Bill; Glynn, Jay; Watson, Karli; Skinner, Morgan (2008). "Asynchronní vzor založený na událostech". Profesionální C # 2008. Wiley. 570–571. ISBN 978-0-470-19137-8.
- ^ Zamknout vzor
- ^ Gabriel, Dicku. „Definice vzoru“. Archivovány od originál dne 02.02.2007. Citováno 2007-03-06.
- ^ Fowler, Martin (2006-08-01). „Psaní vzorů softwaru“. Citováno 2007-03-06.
- ^ Norvig, Peter (1998). Návrhové vzory v dynamických jazycích.
- ^ Hannemann, Jan; Kiczales, Gregor (2002). Implementace návrhového vzoru v Javě a AspectJ. OOPSLA '02. doi:10.1145/582419.582436.CS1 maint: umístění (odkaz)
- ^ Graham, Paul (2002). Pomsta pitomců. Citováno 2012-08-11.
- ^ McConnell, Steve (2004). Code Complete: A Practical Handbook of Software Construction, 2nd Edition. p.105.
Další čtení
- Alexander, Christopher; Ishikawa, Sara; Silverstein, Murray; Jacobson, Max; Fiksdahl-King, Ingrid; Angel, Shlomo (1977). Jazyk vzoru: města, budovy, stavba. New York: Oxford University Press. ISBN 978-0-19-501919-3.
- Alur, Deepak; Crupi, John; Malks, Dan (květen 2003). Core J2EE Patterns: Best Practices and Design Strategies (2. vyd.). Prentice Hall. ISBN 978-0-13-142246-9.
- Beck, Kent (Říjen 2007). Implementační vzory. Addison-Wesley. ISBN 978-0-321-41309-3.
- Beck, Kent; Crocker, R .; Meszaros, G .; Coplien, J. O.; Dominick, L .; Paulisch, F .; Vlissides, J. (Březen 1996). Sborník z 18. mezinárodní konference o softwarovém inženýrství. s. 25–30.
- Borchers, Jan (2001). Vzorový přístup k návrhu interakce. John Wiley & Sons. ISBN 978-0-471-49828-5.
- Coplien, James O.; Schmidt, Douglas C. (1995). Vzorové jazyky návrhu programu. Addison-Wesley. ISBN 978-0-201-60734-5.
- Coplien, James O.; Vlissides, John M.; Kerth, Norman L. (1996). Vzorové jazyky návrhu programu 2. Addison-Wesley. ISBN 978-0-201-89527-8.
- Eloranta, Veli-Pekka; Koskinen, Johannes; Leppänen, Marko; Reijonen, Ville (2014). Navrhování distribuovaných řídicích systémů: přístup vzorového jazyka. Wiley. ISBN 978-1118694152.
- Fowler, Martin (1997). Vzory analýzy: opakovaně použitelné modely objektů. Addison-Wesley. ISBN 978-0-201-89542-1.
- Fowler, Martin (2003). Vzory podnikové aplikační architektury. Addison-Wesley. ISBN 978-0-321-12742-6.
- Freeman, Eric; Freeman, Elisabeth; Sierra, Kathy; Bates, Bert (2004). Hlava první návrhové vzory. O'Reilly Media. ISBN 978-0-596-00712-6.
- Hohmann, Luke; Fowler, Martin; Kawasaki, Guy (2003). Kromě softwarové architektury. Addison-Wesley. ISBN 978-0-201-77594-5.
- Gabriel, Richard (1996). Vzory softwaru: Příběhy ze softwarové komunity (PDF). Oxford University Press. p. 235. ISBN 978-0-19-512123-0. Archivovány od originál (PDF) dne 01.08.2003.
- Gamma, Erichu; Kormidlo, Richarde; Johnson, Ralph; Vlissides, Johne (1995). Návrhové vzory: Prvky opakovaně použitelného objektově orientovaného softwaru. Addison-Wesley. ISBN 978-0-201-63361-0.
- Hohpe, Gregor; Woolf, Bobby (2003). Vzory podnikové integrace: Návrh, stavba a nasazení řešení pro zasílání zpráv. Addison-Wesley. ISBN 978-0-321-20068-6.
- Holub, Allen (2004). Holub na vzorech. Apress. ISBN 978-1-59059-388-2.
- Kircher, Michael; Völter, Markus; Zdun, Uwe (2005). Remoting Patterns: Foundations of Enterprise, Internet and Realtime Distributed Object Middleware. John Wiley & Sons. ISBN 978-0-470-85662-8.
- Larman, Craig (2005). Aplikování UML a vzorů. Prentice Hall. ISBN 978-0-13-148906-6.
- Liskov, Barbara; Guttag, Johne (2000). Vývoj programu v Javě: Abstrakce, specifikace a objektově orientovaný design. Addison-Wesley. ISBN 978-0-201-65768-5.
- Manolescu, Dragos; Voelter, Markus; Noble, James (2006). Vzorové jazyky návrhu programu 5. Addison-Wesley. ISBN 978-0-321-32194-7.
- Marinescu, Floyd (2002). EJB Design Patterns: Advanced Patterns, Processes and Idioms. John Wiley & Sons. ISBN 978-0-471-20831-0.
- Martin, Robert Cecil; Riehle, Dirk; Buschmann, Frank (1997). Vzorové jazyky návrhu programu 3. Addison-Wesley. ISBN 978-0-201-31011-5.
- Mattson, Timothy G; Sanders, Beverly A .; Massingill, Berna L. (2005). Vzory pro paralelní programování. Addison-Wesley. ISBN 978-0-321-22811-6.
- Shalloway, Alan; Trott, James R. (2001). Vysvětlení návrhových vzorů, druhé vydání: Nový pohled na objektově orientovaný design. Addison-Wesley. ISBN 978-0-321-24714-8.
- Vlissides, John M. (1998). Šrafování vzorů: Použity návrhové vzory. Addison-Wesley. ISBN 978-0-201-43293-0.
- Weir, Charles; Noble, James (2000). Software pro malou paměť: Vzory pro systémy s omezenou pamětí. Addison-Wesley. ISBN 978-0-201-59607-6. Archivovány od originál dne 2007-06-17.