Os **patróns arquitectónicos**, ou **patróns de arquitectura** ofrecen solucións a problemas de arquitectura software na enxeñaría de software. Un patrón arquitectónico proporciona unha descrición dos elementos que compoñen un sistema e o tipo de relación que teñen, xunto cun conxunto de restricións sobre as súas responsabilidades e interaccións. O esquema de organización estrutural e de comportamento expresado por un patrón arquitectural presenta unha solución aplicable a diferentes sistemas, en relación normalmente aos seus requerimentos funcionais ou non funcionais mais abstractos. Dise a miúdo que os patróns de arquitectura son solucións organizacionais *estritamente descritas e comunmente dispoñibles*. En comparación cos patróns de deseño, os patróns arquitectónicos teñen un nivel de abstracción maior.

Aínda que un patrón arquitectónico comunica unha imaxe do sistema, non é unha arquitectura como tal. Un patrón arquitectónico é un concepto que captura elementos esenciais dunha arquitectura de software. Moitas arquitecturas diferentes poden implementar un mesmo patrón e polo tanto compartir as mesmas características.

Un dos aspectos máis importantes dos patróns arquitectónicos é que encarnan diferentes atributos de calidade. Por exemplo, algúns patróns representan solucións a problemas de rendemento e outros poden ser utilizados con éxito en sistemas de alta dispoñibilidade. Durante as fases mais temperás do deseño, a persoa ou persoas co rol de arquitectas de software escollen que patróns arquitectónicos ofrecen de mellor maneira as calidades desexadas para o sistema.

Exemplos de patróns arquitectónicos inclúen os seguintes:

* Patróns de acceso e configuración de servizos:
	+ Fachada envoltorio (*wrapper facade*)
	+ Configurador de compoñentes
	+ Interceptador
	+ Extensión de interface
* Patróns de xestión de eventos:
	+ Reactor
	+ Proactor
	+ *Token* de finalización asíncrono
	+ Aceptador-conector
* Patróns de concorrencia:
	+ Obxecto activo
	+ Obxecto monitor
	+ Metade-síncrono/metade-asíncrono
	+ Líder/seguidores
	+ Almacenamento específico

Dominios no deseño de patróns
-----------------------------

* **Control de acceso.** Hai moitas situacións nas cales o acceso a datos, características e funcionalidade son limitadas á definición dos usuarios. Desde un punto de vista arquitectónico, acceder a determinadas partes do software debe ter un rigoroso control.
* **Concorrencia.** Moitas aplicacións deben manexar múltiples tarefas de forma que simule o paralelismo. Hai moitas formas de manexar esta concorrencia e cada unha delas pode ser presentada por un patrón arquitectónico diferente.
* **Distribución.** O problema da distribución dirixe o problema de forma en que os sistemas ou compoñentes se comunican con outros nun contorno distribuído. O patrón máis común para afrontar o problema é *the broker*. Actuando como un *home no medio* entre o compoñente cliente e o servidor. O cliente envía unha mesaxe ó *broker* e este encárgase de completar a conexión.
* **Persistencia.** Os datos persistentes son almacenados en bases de datos ou arquivos e poden ser lidos ou modificados por outros procesos máis adiante. Nos contornos orientados a obxectos isto vai máis alá e o que pode ser accedido ou modificable son as propiedades dos obxectos.