구체적으로 어쩐 인스턴스를 만들지는 서브 클래스가 정한다.다양한 구현체가 있고, 그중에서 특정한 구현체를 만들 수 있는 다양한 팩토리를 제공할 수 있다.만들어야할 Product의 종류가 늘어날수록 Factory 클래스는 커진다.
인스턴스를 오직 한 개만 제공하는 클래스를 만든다.시스템 런타임, 환경 세팅에 대한 정보 등, 인스턴스가 여러개 일 때 문제가 생길 수 있다.이때, 인스턴스를 오직 한개만 만들어 제공하는 클래스가 필요하다.본인의 타입을 가지는 클래스 변수(static)을 생성한다.생성
서로 과련이 있는 여러 객체를 만들어주는 인터페이스구체적으로 어떤 클래스의 인스턴스를 사용하는지 감출 수 있다.팩토리 메서드와 흡사하게 객체 생성 과정을 추상화한 인터페이스를 제공한다.
동일한 프로세스를 거쳐 다양한 구성의 인터페이스를 만드는 방법이다.복잡한 객체를 만드는 프로세스를 독립적으로 분리할 수 있다.만들기 복잡한 객체를 순차적으로 만들 수 있다.복잡한 객체를 만드를 구체적인 과정을 숨길 수 있다.동일한 프로세스로 각기 다르게 구성된 객체를
새로운 인스턴스를 만드는 비용이 매우 클 때, 이미 존재하는 인스턴스를 복사하여 새로움 인스턴스를 만드는 방법이다.JAVA에서는 Cloneable 인터페이스를 받아서 clone 메서드를 구현할 수 있다. (얕은 복사)Cloneable 인터페이스는 얕은 복사를 지원하므로
기존 코드를 클라이언트가 사용하는 인터페이스의 구현체로 바꿔주는 패턴이다.클라이언트가 사용하는 인터페이스를 따르지 않는 기존 코드를 변경하지 않고 재사용할 수 있게 해준다.위의 이미지를 기준으로 설명하면 아래와 같다.1\. Target: 새로운 인터페이스 규격(클라이언
추상적인 것과 구체적인 것을 분리하여 연결하는 패턴이다.하나의 계층 구조일때 보다 각기 나누었을 때 독립적인 계층구주로 발전시킬 수 있다.추상적인 코드를 구체적인 코드 변경 없이도 독립적으로 확장할 수 있다.추상적인 코드와 구체적인 코드를 분리할 수 있다.계층 구조가
기존 코드를 변경하지 않고 부가적인 기능을 추가하는 패턴이다. 상속이 아닌 위임을 사용해서 보다 유연하게(런타임)에 부가 기능을 추가하는 것도 가능하다.새로운 클래스를 만들지 않고 기존 기능을 조합할 수 있다.컴파일 타임이 아닌 런타임에 동적으로 기능을 변경할 수 있다
그룹 전체와 개별 객체를 동일하게 처리할 수 있는 패턴이다. 그러나 트리 형태의 계층 구조에만 적용할 수 있다.클라이언트 입장에서는 '전체'나 '부분'이나 모두 동일할 컴포넌트로 인식할 수 있는 계층 구조를 만든다.복잡한 트리 구조를 편리하게 사용할 수 있다.다형성과
복잡한 서브 시스템 의존성을 최소화하는 방법이다.서브 시스템에 대한 의존성을 한 곳으로 모을 수 있다.퍼사드 클래스가 서브 시스템에 대한 모든 의존성을 가지게 된다.클래스를 각각 이메일 설정을 담당하는 클래스, 메시지를 담당하는 클래스, 이미지를 보내는 클래스로 각각
특정 객체에 대한 접근을 제어하거나 기능을 추가할 수 있는 패턴이다.초기화 기젼, 접근 제어, 로길, 캐싱 등 다양하게 응용하여 사용할 수 있다.기존 코드를 변경하지 않고 새로운 기능을 추가할 수 있다.기존 코드가 해야 하는 일만 유지할 수 있다.기능 추가 및 초기화
객체를 가볍게 만들어 메모리 사용을 줄이는 패턴이다.자주 변하는 속성(또는 외적인 속성)과 변하지 않는 속성(또는 내적인 속성)을 분리하고 재사용하여 메모리 사용을 줄일 수 있다.애플리케이션에서 사용하는 메모리를 줄일 수 있다.코드의 복잡도가 증가한다.
요청을 보내는 쪽(Sender)와 요청을 처리하는 쪽(Receiver)을 분리하는 패턴니다.핸들러 체인을 사용해서 요청을 처리한다.클라이언트 코드를 변경하지 않고 새로운 핸들러 체인에 추가할 수 있다.각각의 체인은 자신이 해야하는 일만 한다.체인을 다양한 방법으로 구성
여러 알고리즘을 캡슐화하고 상호 교환 가능하게 만드는 패턴이다.컨텍스트에서 사용할 알고리즘을 클라이언트가 선택한다.새로운 전략을 추가해도 기존 코드를 변경하지 않는다.상속대신 위임을 사용할 수 있다.런타임에 전략을 변경할 수 있다.복잡도가 증가한다.클라이언트 코드가 구
알고리즘 구조를 서브 클래스가 확장할 수 있도록 템플릿으로 제공하는 방법추상 클래스는 템플릿을 제공하고 하위 클래스는 구체적인 알고리즘을 제공한다.실질적으로 기존의 상속과는 반대로 구체 클래스로부터 기능을 추상클래스가 가져다 쓴다.관점에 따라서 IoC로 볼수 있다.템플
콜백으로 상속 대신 위임을 사용하는 패턴이다. 상속 대신 익명 클래스 또는 람다식을 사용할 수 있다.
요청을 캡슐화하여 호출자(invoker)와 수신자(receiver)를 분리하는 패턴이다. 요청을 처리하는 방법이 바뀌더라도 호출자의 코드는 변경되지 않는다.기존 코드를 변경하지 않고 새로운 커맨드를 만들 수 있다.수신자의 코드가 변경되어도 호출자(Invoker)의 코드
다수의 객체가 특정 객체 상태변화를 감지하고 알림을 받는 패턴이다.발행(PUBLISH) - 구독(SUBSCRIBE) 패턴을 구현할 수 있다.상태를 변경하는 객체(PUBLISHER)와 변경을 감지하는 객체(SUBSCRIBER)의 관계를 느슨하게 유지할 수 있다.Subje
캡슐화를 유지하면서 객체 내부 상태를 외부에 저장하는 방법이다. 객체 상태를 외부에 저장했다라 해당 상태로 다시 복구시킬 수 있다.캡슐화를 지키면서 상태 객체 스냅샷을 만들 수 있다.객체 상태를 저장하고 또 복원하는 역할을 Care Taker에게 위임할 수 있다.객체
집합 객체 내부 구조를 노출시키지 않고 순회하는 방법을 제공하는 패턴이다.→ 집합 내부 객체를 순회하는 클라이언트 코드를 변경하지 않고 다양한 순회 방법을 제공할 수 있다.집합 객체가 가지고 있는 객체에 손쉽게 접근할 수 있다.일관된 인터페이스를 사용해 여러 형태의 집