View
142
Download
2
Category
Preview:
Citation preview
Builder, Prototype,
SingletonDesign Pattern – Generation Pattern
Contents
Builder
Prototype
Singleton
Summary
Builder복잡한객체의여러가지생성방법, 표현방법마다동일한절차를제공
Motive & Usability
동일객체의 표현방법다양화
MVC의 View의 역할 수행
객체의생성 방법을분리하여다양화
여러 생성 알고리즘이 독립적으로 존재하는 경우
다양화된생성 & 표현방법을동일한절차로사용
document
Structure & Contributors
Director
Construct()
Builder
BuildPart()
Concrete Builder
BuildPart()
GetResult()
Productfor all objects in structure {
builder->BuildPart()
}
구현된빌더의 종류가다양함
추상빌더(인터페이스제공)실제 생성절차수행
생성 or 표현된객체
Cooperation Method
new ConcreteBuilder
new Director(aConcreteBuilder)
Construct() BuildPartA()
BuildPartB()
…
GetResult()
aClient aDirector aConcretBuilder
Effect
제품의내부 표현다양화
Builder를 통해 내부 표현 방법 관리
표현 방법을 추가하거나 수정할 때는 서브클래싱을 사용
생성및 표현에필요한코드분리
제품 객체의 세부 내용 캡슐화
생성및 표현절차 세분화
Director에서 실제 객체 생성
Implements
1. 조합, 구축에필요한인터페이스정의
절차 상 추가 작업이 필요한 부분을 인터페이스로 정의
2. 제품객체의 추상화여부
만들어질 객체 간 공통점이 없는 경우 추상 클래스를 두지 않음
3. 일반적으로 Builder에서는객체의동작을구현하지않음
순수 가상 함수로 두지 않고 몸통을 비워둡니다
Open-Close Principle
Prototype원형이되는인스턴스를사용하여생성할객체의종류를명시하고, 이렇게만든견본을복사해서새로운객체를생성
Motive & Usability
무분별한서브클래싱 예방
범용 객체를 최대한 활용
객체생성 비용절약
초기 값은 유지하되 일부 값을 변경하여 사용
Factory와는 다르다! Factory와는!
클래스 그룹을 형성하지 않음
런타임에 클래스 결정
Factory로 생성하는 객체를 복제하는 방법으로 조합 가능
Structure & Contributors
Client
Operation()
Prototype
Clone()
p = prototype->Clone()
Prototype
Clone()
Prototype
Clone()
return copy of self return copy of self
Clone() 인터페이스정의
실제 Clone() 동작구현
갖다씀
Effect
런타임에새로운 객체추가/삭제
값, 구조를다양화하여 새로운객체정의
멤버 변수의 값에 따라 새로운 객체 정의
기본 골격만을 원형으로 제공하여 유연성 확보
서브클래스의수를 줄임
동적으로클래스에 따라응용프로그램 설정
Prototype Manager를 통해 클래스-프로그램 간 연결
Implements
1. Prototype Manager 사용
주로 Factory Method로 구현하거나 필요한 원형을 추가 등록
2. Clone() 구현
얕은 복사/깊은 복사를 잘 구분해야 합니다
3. Clone() 초기화
Clone()으로 객체 생성 이후 초기 값 설정
Initialize() 추가 구현
Singleton오직한개의클래스인스턴스만을갖도록보장, 전역적인접근점제공
=전역변수
Motive & Usability, Structure
전역변수의 객체지향버전
전역객체를 서브클래싱으로확장가능
Singleton
static Instance()
…
static uniqueInstance
Singleton Data
Effect
인스턴스접근 통제
namespace 오용 예방
연산및 표현방법 정리
Singleton을 상속 받아 필요한 클래스를 전역화
인스턴스개수변경가능
여러 개의 인스턴스에 대한 접근 방법 정의
정적연산 대체
Implements
1. 객체의유일성 보장
정적 객체의 인스턴스 선언은 한 곳에만 존재하게 구현
정적 객체의 초기화 시점에 초기화에 필요한 정보의 유무 확인
C++ 언어 차원에서 전역 객체의 생성 순서는 정의되어 있지 않음(undefined)
2. Singleton 서브클래싱
유일성이 보장된 서브클래스 관리
서브클래스 레지스트리
Implements
2. Singleton 서브클래싱
유일성이 보장된 서브클래스 관리
Summary
Summary
Factory – 그룹화 된클래스
Builder – 객체변환작업 or 객체생성작업에사용
Prototype – Ctrl + C, Ctrl + V
Singleton – 전역변수대체
Summary
Abstract Factory
virtual FactoryMethod() = 0
Singleton
Instance()Concrete Factory
virtual FactoryMethod()
Concrete Factory
virtual FactoryMethod()
Concrete Factory
virtual FactoryMethod()
FactoryMethod() {
return prototype->Clone();
}
Recommended