참고
점층적 생성자 패턴, 자바빈즈 패턴, 빌더패턴
디자인패턴
디자인 패턴이란
- 숙련된 객체지향소프트웨어개발자에 의해 사용되는 베스트 사례모음집
- 소프트웨어 개발 중 직면하게 되는 일반적인 문제들의 해결을 위한 솔루션 모음집
- 오랜 기간 동안 수많은 개발자들에 의해 시도되고 테스트된 솔루션 모음집
디자인 패턴 종류
생성(Creational)패턴
- 객체 생성 방법을 추상화하기 위한 패턴 상황에 맞는 적절한 객체 생성으로 효율성 제고
- 추상 팩토리 (Abstract Factory)
- 빌더 (Builder) ★
- 팩토리 (Factory) ★
- 팩토리 메서드 (Factory Method)
- 원형 (Prototype)
- 단일체 (Singleton)
1. 추상 팩토리 (Abstract Factory)
- JAVA에서는 Interface에 해당
- 구체적인 클래스를 지정하지 않고 관련성을 갖는 객체들의 집합을 생성하거나 서로 독립적인 객체들의 집합을 생성할 수 있는 인터페이스를 제공하는 패턴
2. 빌더 (Builder) ★
- 복합 객체의 생성 과정과 표현방법을 분리하여 동일한 생성 절차에서 서로 다른 표현 결과를
만들 수 있게 하는 패턴
- 복합객체를 통해서 하나의 객체를 만드는 형태
- 객체를 만드느 가장 좋은 방법 중 하나
- 예제 12.DesingPattern /kr.or.ddit.creational.builder
3. 팩토리(Factory) ★
- 객체 생성방법을 클라이언트에게 노출시키지 않고, 공통 인터페이스를 통해 인스턴스를 생성하도록 하는 패턴
- 변경될 수 있는 변수를 줄여 유지보수가 용이
- 객체를 생성하는 인터페이스는 미리 정의하되, 인스턴스를 만들 클래스의 결정은 서브클래스 쪽에서 내리는 패턴
- 예제 12.DesignPattern / kr.or.ddit.creational.factory
4. 원형(Prototype)
- 별로 만날일 없음..
- 생성할 객체의 종류를 명세하는데에 원형이 되는 예시물을 이용하고, 그 원형을 복사함으로써 새로운 객체를 생성하는 패턴
- clone을 이용하여 원래만들어진 객체를 복제
5. 단일체(Singleton)
- 어떤 클래스의 인스턴스는 오직 하나임을 보장하며, 이 인스턴스에 접근할 수 있는 전역전인 접촉점을 제공하는 패턴
구조(Structural)패턴
- 더 큰 구조 또는 새로운 기능을 형성하기 위해 어떻게 클래스 및 객체를 합성하는가와 관련된 패턴
- 적응자 (Adapter)
- 가교 (Bridge)
- 복합체 (Composite)
- 장식자 (Decorator)
- 퍼사트 (Facade)
- 플라이급 (Flyweight)
- 프록시 (Proxy)
1.적응자(Adapter)
- 클래스의 인터페이스를 사용자가 기대하는 다른 인터페이스로 변환하는 패턴
- 인터페이스 기반으로 설계
- 호환되지 않는 두 인터페이스 사이의 브리지로 작동, 두개의 독립적인 인터페이스의 기능을 결합하기 때문에 이러한 유형의 설계 패턴은 구조적 패턴으로 제공
2.가교(Bridge)
- 구현부에서 추상층을 분리하여 각자 독립적으로 변형할 수 있게 하는 패턴
- 자주 안나와..
3.복합체(Composite)
- 객체들의 관계를 트리 구조로 구성하여 부분~전체 계층을 표현하는 패턴
4.장식자(Decorator) ★
- 기능을 덧붙일때!!!
- 주어진 상황 및 용도에 따라 어떤 객체에 책임을 덧붙이는 패턴
- 보조스트림 -> 장식자로 이루어짐
- 예제 12.DesignPattern / kr.or.ddit.structural.decorator
5.퍼사드(Facade)
- 서브 시스템에 있는 인터페이스 집합에 대해서 하나의 통합된 인터페이스를 제공하는 패턴
6.플라이급 (Flyweight)
- 별로 안나와..
- 크기가 작은 객체가 여러개 있을 때, 공유를 통해 이들을 효율적으로 지원하는 패턴
7.프록시(Proxy)
- Decorator와 비슷? (기본기능에 새로운 기능 추가)
- 기능을 중간에서 사용할 기능에 대한 권한(검증,인증)을 준다?, 대리인 & 중간에 통제 역할
- 어떤 다른 객체로 접근하는 것을 통제하기 위해서 그 객체의 대리자(surrogate) 또는 자리채움자(placeholder)를 제공하는 패턴
행동(Behavioral)패턴
- 객체나 클래스 사이의 알고리즘이나 책임 분배에 관련된 패턴
- 어떤 처리의 책임을 어느 객체에 할당하는 것이 좋은지, 알고리즘을 어느 객체에 정의하는 것이 좋은지 등을 다루는 패턴
- 책임 연쇄 (Chain of Responsibility)
- 명령(Command) ★ 서블릿할때
- 해석자 (Intepreter)
- 반복자 (Iterator)
- 중재자 (Mediator)
- 메멘토 (Memento)
- 감시자 (Observer)★
- 상태 (State)
- 전략 (Strategy) ★
- 템플릿 메서드 (Template Method) ★
- 방문자 (Visitor)
1.책임 연쇄 (Chain of Responsibility)
- 별로 안나와..
- 요청을 처리할 수 있는 기회를 하나 이상의 객체에게 부여하여 요청을 보내는 객체와 그 요청을 받는 객체 사이의 결합을 피하는 패턴
2.명령(Command) , 예제 해보기 ★
- 요청을 객체의 형태로 캡슐화하여 서로 요청이 다른 사용자의 매개변수화, 요청 저장 또는 로깅, 그리고 연산의 취소를 지원하게 만드는 패턴
- 명령 자체를 객체화 시키는 것
3.해석자(Interpreter)
- 볼일 없음..
- 주어진 언어에 대해, 그 언어의 문법을 위한 표현 수단을 정의하고, 이와 아울러
그 표현 수단을 사용하여 해당 언어로 작성된 문장을 해석하는 해석기를 정의하는 패턴
4.반복자(Iterator), 예제 해보기 ★
- 내부 표현부를 노출하지 않고 어떤 객체 집합에 속한 원소들을 순차적으로 접근할 수 있는 방법을 제공하는 패턴
- 별로 안나와..
- 한 집합에 속해있는 객체들의 상호작용을 캡슐화하는 객체를 정의하는 패턴
6.메멘토(Memento)
- 별로 안나와..
- 캡슐화를 위배하지 않은 채로 어떤 객체의 내부 상태를 잡아내고 실체화시켜, 이후에 해당 객체가 그 상태로 되돌아올 수 있도록 하는 패턴
7.감시자(Observer),예제 해보기 ★
- 객체들 사이에 일 대 다의 의존 관계를 정의해 두어, 어떤 객체의 상태가 변할 때
그 객체에 의존성을 가진 다른 객체들이 그 변화를 통지 받고 자동으로 갱신될 수 있게 만드는 패턴 // notify(Thread)
8.상태(State)
- command 패턴과 비슷
- 객체의 내부 상태에 따라 스스로 행동을 변경할 수 있게끔 허가하는 패턴
9.전략(Strategy)★
- 동일 계열의 알고리즘군(기능)을 정의하고, 각각의 알고리즘을 캡슐화하며, 이들을 상호교환이 가능하도록 가능하도록 만드는 패턴
- 예제 12.DesignPattern / kr.or.ddit.behavioral.strategy
10. 템플릿 메서드(Template Method)
- 객체의 연산에는 알고리즘의 뼈대만을 정의하고 각 단계에서 수행할 구체적 처리는 서브클래스 쪽으로 미루는 패턴
11. 방문자 (Visitor)
- 객체 구조를 이루는 원소에 대해 수행할 연산을 표현하는 패턴