부모 클래스에서 객체를 생성하기 위한 인터페이스를 제공하지만, 자식 클래스가 생성될 객체의 유형을 결정할 수 있도록 한다. 사용처코드에서 작업하는 객체의 정확한 유형과 종속성을 미리 알 수 없는 경우라이브러리 또는 프레임워크의 사용자에게 내부 구성요소를 확장하는방
클래스의 인터페이스를 사용자가 원하는 인터페이스 형태로 변환시킨다. 서로 일치하지 않는 인터페이스를 갖는 클래스들을 함께 동작시킨다. 사용처기존 클래스를 사용하고 싶지만 해당 인터페이스가 나머지 코드와 호환하지 않는 경우Service를 변경할 수 없을 때.
핸들러를 따라 요청을 전달할 수 있는 디자인 패턴. 요청을 받으면 각 핸들러는 요청을 처리할지 다음 체인으로 전달할지 결정한다. 사용처순차적인 검증에서 실패하면 다른 검사를 진행할 이유가 없을 때각각의 검증 코드를 재사용할 때장점추가적인 처리가 필요 없을 때
실제 객체가 정확히 무엇인지 알지 못해도 서로 관련성이 있거나 독립적인 여러 객체를 생성하고 조작할 수 있도록 해준다. 자주 사용하는 Iterator가 Abstract Factory패턴이 적용되었다.사용처객체가 생성되거나 구성, 표현되는 방식과 무관하게 시스템을 독립적
복잡한 객체를 단계별로 구성할 수 있다. 동일한 구성의 코드로 객체의 다양한 유형과 표현을 생성할 수 있다.사용처생성자에 인자가 많을 때생성자에 매개변수가 많을 때장점객체를 단계별로 구성하거나, 재귀적으로 단계를 구성할 수 있다.객체를 다양하게 구성할 때 동일 코드를