Em
engenharia de software, um (do inglês
design pattern) é uma solução geral reutilizável para um problema que ocorre com frequência dentro de um determinado contexto no
projeto de software. Um padrão de projeto não é um projeto finalizado que pode ser diretamente transformado em código
fonte ou de
máquina, ele é uma descrição ou modelo (
template) de como resolver um problema que pode ser usado em muitas situações diferentes. Padrões são
melhores práticas formalizadas que o programador pode usar para resolver problemas comuns quando projetar uma aplicação ou sistema. Padrões de projeto
orientados a objeto normalmente mostram relacionamentos e
interações entre
classes ou
objetos, sem especificar as classes ou objetos da aplicação final que estão envolvidas. Padrões que implicam
orientação a objetos ou estado mutável mais geral, não são tão aplicáveis em linguagens de
programação funcional.
Padrões de projeto residem no domínio de módulos e interconexões. Em um nível mais alto há padrões arquiteturais que são maiores em escopo, usualmente descrevendo um padrão global seguido por um sistema inteiro.