패턴의 정의는 계속해서 다양하고 풍부해져 왔다. 고로 패턴의 정의보다는 용어 자체가 풍기는 미묘한 늬앙스를 이해하는 것이 중요하다. 패턴이란 무엇인가를 논의할 때 반복적으로 언급되는 몇 가지 핵심적인 특징이 있다.
패턴은 한 컨텍스트에서 유용한 동시에 다른 컨텍스트에서도 유용한 아이디어다. 패턴이 지닌 가장 큰 가치는 경험을 통해 축적된 산물이라는 점이다.
패턴은 지식 전달과 커뮤니케이션의 수단으로 활용할 수 있기 때문에 가장 중요한 요소는 패턴의 이름이다. “인터페이스를 추가하고 이를 구체화하는 클래스를 만든 뒤 객체의 생성자나 setter 메서드에 할당 해 런타임 시 이 알고리즘을 바꿀 수 있게 하자"는 대화를 “STRATEGY 패턴을 적용하자!”는 대화로 바꿀 수 있다.
또한 패턴은 홀로 존재하지 않는다. 연관된 패턴들의 집합이 모여 패턴 언어를 구성한다고 말한다. 이는 연관된 카테고리뿐만 아니라 생성 규칙과 함께 다른 패턴과의 관계, 협력 규칙을 포함한다.
가장 일반적인 분류방법은 패턴의 범위, 적용 단계에 따라 아키텍처 패턴, 분석 패턴, 디자인 패턴, 이디엄(Idiom) 의 4 가지로 분류하는 것이다.
디자인 패턴은 특정 정황 내에서 일반적인 설계 문제를 해결하는 패턴이다. 특정 설계 문제를 해결하는 것을 목적으로 하며 언어, 패러다임에 독립적이다.
아키텍처 패턴은 디자인 패턴 상위에 위치한다. 이는 미리 정의된 서브 시스템을 제공하고 서브시스템들의 책임을 정의한다. 이 사이의 관계를 조직화하는 규칙, 가이드라인을 포함한다. 구체적인 SW 아키텍처를 위한 템플릿을 제공하고 디자인 패턴과 마찬가지로 언어, 패러다임에 독립적이다.
이디엄은 디자인 패턴 하위에 위치한다. 특정 언어에 종속적이다. 고로 타 언어에서는 무용지물일 수 있다.
분석 패턴은 기술적 문제가 아닌 도메인 내의 개념적 문제에 초점을 둔다. 업무 모델링 시의 공통적 구조를 표현하는 개념들의 집합이다.
패턴은 공통적으로 사용할 수 있는 역할, 책임, 협력의 템플릿이다. 예를 들어보면