단 하나의 유일한 인스턴스만 가지는 코드 패턴. 메모리 절약을 위해 인스턴스가 필요할 때 똑같은 인스턴스를 새로 만들지 않고 기존의 인스턴스를 가져와 활용하는 기법을 말한다. 하나의 인스턴스를 다른 모듈들이 공유하여 사용하기 때문에 비용이 줄어들지만 의존성이 높아진다는 단점이 있다.
대표적으로 데이터베이스 연결 모듈을 예로 들 수 있다. 데이터베이스에 접속하는 작업은 그 자체로 무거운 작업에 속하며 객체를 한번만 생성하고 돌려쓰면 되기 때문에 여러번 생성할 필요가 없기 때문이다.이 외에도 디스크 연결, 네트워크 통신, DBCP 커넥션풀, 스레드풀, 캐시, 로그기록 객체 등에 이용된다.
따라서 보통 싱글톤 패턴이 적용된 객체가 필요한 경우는 그 객체가 리소스를 많이 차지하는 역할을 하는 무거운 클래스일 때 적합하다.
객체를 사용하는 코드에서 객체 생성 부분을 떼어내 추상화한 패턴. 상속 관계에 있는 두 클래스에서 상위 클래스가 중요한 뼈대를 결정하고, 하위 클래스에서 객체 생성에 관한 구체적인 내용을 결정하는 패턴이다. 상위, 하위 클래스가 분리되기 때문에 느슨한 결합을 가지며 상위 클래스에서는 인스턴스 생성 방식에 대해 전혀 알 필요가 없기 때문에 더 많은 유연성을 갖게 된다. 한마디로 객체를 만들어내는 공장을 만드는 패턴이라고 보면 된다.
ex) 아메리카노 레시피, 우유레시피, 라떼 레시피 내용이 있는 하위 클래스가 컨베이어 벨트를 통해 전달되고, 상위클래스인 바리스타 공장에서 이 레시피를 토대로 우유 등을 생산한다.
객체의 행위를 바꾸고 싶은 경우 직접 수정하지 않고 전략이라고 부르는 '캡슐화한 알고리즘'을 컨텍스트 안에서 바꿔주면서 상호 교체가 가능하게 만드는 패턴.
실행(런타임)중에 알고리즘 전략을 선택하여 객체 동작을 실시간으로 바뀌도록 해주는 행위 디자인 패턴이다. 전략이란 알고리즘이 될 수도 있고 기능이나 동작이 될 수도 있는 특정 목표를 수행하기 위한 행동 계획을 말한다.
어떤일을 수행하는 알고리즘이 여러가지 일 때, 동작들을 미리 전략으로 정의함으로써 손쉽게 전략을 교체할 수 있는, 알고리즘 변형이 빈번하게 필요한 경우에 적합한 패턴이다.