객체지향 소프트웨어를 설계하는 것은 쉬운 일이 아니다. 게다가, 재사용할 수 있는 객체지향 소프트웨어를 만드는 것은 더 힘들다. 적절한 객체를 식별해야 하고, 올바른 크기의 클래스와 클래스의 인터페이스를 정의해야 하고, 클래스 간의 상속을 정의하며, 클래스들 간의 관계를 설정할 수 있어야 한다.
설계는 지금 당장 가지고 있는 문제를 해결할 수 있어야 하지만, 나중에 생길 수 있는 문제나 추가된 요구사항들도 수용할 수 있도록 일반적이고 포괄적이어야 한다. 즉, 재설계를 하지 않아도 다시 사용할 수 있어야 하고, 아니면 가능한 최소한의 수정을 통해서 다시 사용할 수 있는 설계여야 한다.
전문가들은 초보자들처럼 모든 문제를 처음 기초 단계부터 해결하려고 하지 않는다. 대신, 전에 사용했던 해결책을 다시 사용한다. 그리고 좋은 방법을 찾아냈다면 그 방법을 반복해서 계속 사용하게 된다. 이런 경험을 통해 전문가가 만들어지고, 결국에는 많은 객체지향 시스템에서 클래스 패턴이나 객체들 간의 상호 작용 방식이 반복됨을 알게 된다. 이런 반복된 패턴들은 특정 설계의 문제점들을 해결해 주고, 좀 더 유연하고, 근사하며, 재사용 가능한 객체지향 소프트웨어를 만들어 준다. 또한 설계자들이 이전 경험을 새로운 설계의 기본으로 삼아 설계들을 성공적으로 재사용할 수 있도록 도와준다. 재사용에 기반을 둔 설계에 익숙한 사람들은 패턴을 자신의 설계에 즉시 응용한다.
디자인 패턴을 이용하면 좋은 설계나 아키테거를 재사용하기 쉬워진다. 입증된 기술을 다자인 패턴으로 표현해 두면 새로운 시스템 개발자들은 디자인 패턴을 더 자주 유용하게 사용할 수 있다. 디자인 패턴은 설계자로 하여금 재사용이 가능한 설계는 선택하고, 재사용을 방해하는 설계는 배제하도록 도와준다. 또한 패턴을 사용하면 이미 만든 시스템의 유지보수나 문서화도 개선할 수 있고, 클래스의 명세도 정확하게 할 수 있으며, 객체 간의 상호작용 또는 설계의 의도 등까지 명확하게 정의할 수 있다. 간단하게 말해서, 디자인 패턴은 설계자들이 "올바른" 설계를 빨리 만들 수 있도록 도와준다.
설계는 지금 당장 가지고 있는 문제를 해결할 수 있어야 하지만, 나중에 생길 수 있는 문제나 추가된 요구사항들도 수용할 수 있도록 일반적이고 포괄적이어야 한다. 즉, 재설계를 하지 않아도 다시 사용할 수 있어야 하고, 아니면 가능한 최소한의 수정을 통해서 다시 사용할 수 있는 설계여야 한다.
전문가들은 초보자들처럼 모든 문제를 처음 기초 단계부터 해결하려고 하지 않는다. 대신, 전에 사용했던 해결책을 다시 사용한다. 그리고 좋은 방법을 찾아냈다면 그 방법을 반복해서 계속 사용하게 된다. 이런 경험을 통해 전문가가 만들어지고, 결국에는 많은 객체지향 시스템에서 클래스 패턴이나 객체들 간의 상호 작용 방식이 반복됨을 알게 된다. 이런 반복된 패턴들은 특정 설계의 문제점들을 해결해 주고, 좀 더 유연하고, 근사하며, 재사용 가능한 객체지향 소프트웨어를 만들어 준다. 또한 설계자들이 이전 경험을 새로운 설계의 기본으로 삼아 설계들을 성공적으로 재사용할 수 있도록 도와준다. 재사용에 기반을 둔 설계에 익숙한 사람들은 패턴을 자신의 설계에 즉시 응용한다.
디자인 패턴을 이용하면 좋은 설계나 아키테거를 재사용하기 쉬워진다. 입증된 기술을 다자인 패턴으로 표현해 두면 새로운 시스템 개발자들은 디자인 패턴을 더 자주 유용하게 사용할 수 있다. 디자인 패턴은 설계자로 하여금 재사용이 가능한 설계는 선택하고, 재사용을 방해하는 설계는 배제하도록 도와준다. 또한 패턴을 사용하면 이미 만든 시스템의 유지보수나 문서화도 개선할 수 있고, 클래스의 명세도 정확하게 할 수 있으며, 객체 간의 상호작용 또는 설계의 의도 등까지 명확하게 정의할 수 있다. 간단하게 말해서, 디자인 패턴은 설계자들이 "올바른" 설계를 빨리 만들 수 있도록 도와준다.