Ontwerppatroon
Een ontwerppatroon of patroon (Engels: design pattern) in de informatica is een generiek opgezette softwarestructuur, die een bepaald veelvoorkomend type software-ontwerpprobleem oplost. Het patroon geeft geen concrete oplossing, maar biedt een soort sjabloon, waarmee het ontwerpprobleem kan worden aangepakt. In de wereld van het objectgeoriënteerd programmeren zal een ontwerppatroon eruitzien als een klassendiagram, waar de relatie tussen de verschillende klassen en objecten weergegeven wordt. Een ontwerppatroon is geen algoritme, omdat een algoritme een berekeningsprobleem oplost en geen ontwerpprobleem. Onderstaand artikel geeft uitleg over het meest gebruikte groep van patronen, die van de "gang of four". Voor andere patronen, zie GRASP. Naast ontwerppatronen zijn er in de loop van de tijd ook patronen ontstaan op het gebied van de informatiearchitectuur en voor het het beveiligen van informatie.

Geschiedenis
De term 'design pattern' werd in 1977 geïntroduceerd door Christopher Alexander, emeritus-hoogleraar aan de University of California. Hij deed dat in het boek A Pattern Language: Towns, Buildings, Construction en beschreef daarin een ontwerpmethode voor architecten en stedenbouwkundigen.
In 1994 namen Erich Gamma, Richard Helm, Ralph Johnson en John Vlissides, ook bekend als De Bende van Vier (Engels: The Gang of Four), dit concept over en pasten het toe in de softwareontwikkeling. Zij deden dat met het boek Design Patterns : Elements of Reusable Object-Oriented Software. 
Wat een ontwerppatroon nu precies is bleef 10 jaar lang een onderwerp van discussie.

Gebruik 

Het gebruiken van patronen versnelt het maken van bijvoorbeeld software, omdat beschikbare oplossingen direct kunnen worden hergebruikt. Hoewel oplossingen voor veelvoorkomende ontwerpproblemen bestaan, is het vaak lastig om deze toe te passen in andere situaties vanwege de details in de implementatie. Patronen zijn een generieke beschrijving die het voordeel bieden dat het oplossingspatroon herkenbaar is, ongeacht de implementatiedetails. De toepassing van ontwerppatronen verhoogt in potentie de kwaliteit van software omdat ontwerpen worden gemaakt die zich in de praktijk reeds hebben bewezen.

Beschrijving

Er zijn in de literatuur veel verzamelingen van patronen verschenen. Daarbij is normaal geworden per patroon een beschrijving te geven waarin een aantal standaard onderdelen voorkomt. Als voorbeeld noemen we de "normale" onderdelen van softwarepatronen:

Patroonnaam en IndelingIeder patroon hoort voorzien te zijn van een unieke en beschrijvende naam waarmee het patroon geïdentificeerd wordt en waarnaar verwezen kan worden. Daarbij moet het patroon ook ingedeeld worden naar soort (zoals verderop beschreven) om het patroon nog makkelijk terug te kunnen vinden.
Doel Een beschrijving van het doel van het patroon, het soort probleem dat het patroon oplost.
Ook bekend als Eventueel andere namen voor hetzelfde patroon in de literatuur.
Motivering Een probleembeschrijving met context waarop het patroon van toepassing is. Geeft een voorbeeld van wanneer men het patroon toe zou passen.
Toepasbaarheid Geeft een algemeen idee over de situaties (de contexten) waarin het patroon van toepassing is.
Structuur Een grafische weergave van de structuur van het patroon, bijvoorbeeld met behulp van  klassendiagrammen en interactiediagrammen.
Rollen Een opsomming van de klassen/objecten in het patroon en hun rol in het patroon.
Collaboraties Beschrijft de interacties tussen de klassen en objecten in het patroon.
Gevolgen Beschrijft de resultaten, neveneffecten en overwegingen die op gebruik van het patroon van toepassing zijn.
Implementatie Beschrijft de implementatie van het patroon, met een bespreking van de technieken die daarvoor gebruikt worden.
Voorbeeldcode Een voorbeeld van een implementatie van het patroon in een programmeertaal.
Bekende toepassingen Voorbeelden van bekende situaties waarin het patroon toegepast is.
Gerelateerde patronen Beschrijft patronen die verband houden met het huidige patroon en wat het verband is (bijvoorbeeld kan gebruikt worden in plaats van of kan samen gebruikt worden met). Beschrijft ook de verschillen met gelijkende patronen.

Voorbeelden van ontwerppatronen uit de informatica
Hieronder volgt een opsomming van een aantal patronen, ingedeeld naar categorie.

Fundamentele patronen
Patronen die het fundament vormen van object-georiënteerd ontwerp.

 Delegatie
 Functioneel Ontwerp
 Interface
 Proxy
 Immutabiliteit
 Vlaginterface

Creatie
Patronen aangaande mechanismes om in programma's objecten aan te maken.

 Abstract Factory — Laat een object maken waarvan slechts de basisklasse bekend hoeft te zijn.
 Builder — Lijkt op een Abstract Factory, maar levert andere producten dan objecten.
 Factory — Een basisklasse laat het maken van geaggregeerde objecten over aan een subklasse.
 Prototype — Het maken van objecten door objecten te kopiëren.
 Singleton — Een klasse heeft slechts één instantie.

Structuur
Patronen die de structuur van een programma moeten verbeteren, complexiteit tegen moeten gaan en programma's inzichtelijker moeten maken.

 Adapter
 Bridge
 Composite
 Decorator
 Façade
 Flyweight
 Proxy

Gedrag
Patronen waarin een bepaald gedrag vastligt dat vaak voorkomt in programma's.

 Chain of responsibility
 Command
 Interpreter
 Iterator
 Mediator
 Memento
 Observer
 State
 Strategy
 Template method
 Visitor

Andere patronen
Daarnaast worden er, door anderen, nog de volgende groepen van patronen beschreven.
 Gebeurtenispatronen (Engels: Event handling patterns)
 Architectuurpatronen (Engels: Architectural patterns)

Zie ook
Antipatroon

Externe link
Patronen voor het beveiligen van informatie
Catalog of Patterns of Enterprise Application Architecture
Design Patterns