브리지 패턴
구현과 더불어 추상화 부분까지 변경해야 한다면 브리지(Bridge) 패턴을 쓰면 된다.

브리지 패턴을 사용하면 추상화된 부분과 구현 부분을 서로 다른 클래스 계층구조로 분리해서 그 둘을 모두 변경할 수 있다.
빌더 패턴
제품을 여러 단계로 나눠서 만들도록 제품 생산 단계를 캡슐화하고 싶다면 빌더(Builder) 패턴을 사용하면 된다.

빌더 패턴을 사용하면 여러 단계와 다양한 절차를 거쳐 객체를 만들 수 있다.
책임 연쇄 패턴
1개의 요청을 2개 이상의 객체에서 처리해야 한다면 책임 연쇄(Chain of Responsibility) 패턴을 사용하면 된다.

책임 연쇄 패턴을 사용하면 객체 사슬을 통해, 자기가 받은 요청을 검사해서 직접 처리하거나 사슬에 들어있는 다른 객체에게 넘겨 요청을 보낸 쪽과 받는 쪽을 분리할 수 있다.
플라이웨이트 패턴
어떤 클래스의 인스턴스 하나로 여러 개의 ‘가상 인스턴스’를 제공하고 싶다면 플라이웨이트(Flyweight) 패턴을 사용하면 된다.

플라이웨이트 패턴을 사용하면 인스턴스는 하나만 만들고, 상태는 클라이언트 객체가 관리하여 동일한 인스턴스의 생성으로 인한 오버헤드를 막을 수 있다.
인터프리터 패턴
어떤 언어의 인터프리터를 만들 때는 인터프리터(Interpreter) 패턴을 사용하면 된다.

인터프리터 패턴을 사용하면 문법과 구문을 번역하는 인터프리터 클래스를 기반으로 간단한 언어를 정의할 수 있다.
중재자 패턴
서로 관련된 객체 사이의 복잡한 통신과 제어를 한곳으로 집중하고 싶다면 중재자(Mediator)패턴을 사용하면 된다.

중재자 패턴을 사용하면 로직이 존재하는 시스템과, 시스템에 들어있는 객체들을 분리할 수 있다.
메멘토 패턴
객체를 이전의 상태로 복구해야 한다면 메멘토(Memento) 패턴을 쓰면 된다.

메멘토 패턴을 사용하면 저장된 상태를 핵심 객체와는 다른 별도의 객체에 보관할 수 있다.
프로토타입 패턴
어떤 클래스의 인스턴스를 만들 때 자원과 시간이 많이 들거나 복잡하다면 프로토타입(Prototype) 패턴을 쓰면 된다.

프로토타입 패턴을 사용하면 기존 인스턴스를 복사하기만 해도 새로운 인스턴스를 만들 수 있다.
비지터 패턴
다양한 객체에 새로운 기능을 추가해야 하는데 캡슐화가 별로 중요하지 않다면 비지터(Visitor) 패턴을 쓰면 된다.

비지터 패턴을 사용하면 트래버서(Traverser) 객체가 복합 객체 내에 속한 모든 객체에 접근할 수 있도록 도와주고, 이후 비지터 객체가 해당 객체들에 원하는 작업을 처리할 수 있다.
GitHub Code Reference: https://github.com/Krapi0314/Design_Patterns
GitHub - Krapi0314/Design_Patterns: Java Implementation of GoF's Design Patterns
Java Implementation of GoF's Design Patterns. Contribute to Krapi0314/Design_Patterns development by creating an account on GitHub.
github.com
Reference: http://www.yes24.com/Product/Goods/108192370
헤드 퍼스트 디자인 패턴 - YES24
유지관리가 편리한 객체지향 소프트웨어 만들기!“『헤드 퍼스트 디자인 패턴(개정판)』 한 권이면 충분하다.이유 1. 흥미로운 이야기와 재치 넘치는 구성이 담긴 〈헤드 퍼스트〉 시리즈! 하나
www.yes24.com
'객체지향 및 기반 언어 > 디자인 패턴' 카테고리의 다른 글
[Design Pattern] Chapter 13 실전 디자인 패턴 (0) | 2022.11.05 |
---|---|
[Design Pattern] Chapter 12 복합 패턴 (0) | 2022.10.30 |
[Design Pattern] Chapter 11 프록시 패턴 (0) | 2022.10.29 |
[Design Patterns] Chapter 10 상태 패턴 (0) | 2022.10.23 |
[Design Patterns] Chapter 09 반복자 패턴과 컴포지트 패턴 (0) | 2022.10.23 |