21
Builder, Prototype, Singleton Design Pattern – Generation Pattern

Builder, prototype, singleton pattern

Embed Size (px)

Citation preview

Page 1: Builder, prototype, singleton pattern

Builder, Prototype,

SingletonDesign Pattern – Generation Pattern

Page 2: Builder, prototype, singleton pattern

Contents

Builder

Prototype

Singleton

Summary

Page 3: Builder, prototype, singleton pattern

Builder복잡한객체의여러가지생성방법, 표현방법마다동일한절차를제공

Page 4: Builder, prototype, singleton pattern

Motive & Usability

동일객체의 표현방법다양화

MVC의 View의 역할 수행

객체의생성 방법을분리하여다양화

여러 생성 알고리즘이 독립적으로 존재하는 경우

다양화된생성 & 표현방법을동일한절차로사용

PDF

document

Page 5: Builder, prototype, singleton pattern

Structure & Contributors

Director

Construct()

Builder

BuildPart()

Concrete Builder

BuildPart()

GetResult()

Productfor all objects in structure {

builder->BuildPart()

}

구현된빌더의 종류가다양함

추상빌더(인터페이스제공)실제 생성절차수행

생성 or 표현된객체

Page 6: Builder, prototype, singleton pattern

Cooperation Method

new ConcreteBuilder

new Director(aConcreteBuilder)

Construct() BuildPartA()

BuildPartB()

GetResult()

aClient aDirector aConcretBuilder

Page 7: Builder, prototype, singleton pattern

Effect

제품의내부 표현다양화

Builder를 통해 내부 표현 방법 관리

표현 방법을 추가하거나 수정할 때는 서브클래싱을 사용

생성및 표현에필요한코드분리

제품 객체의 세부 내용 캡슐화

생성및 표현절차 세분화

Director에서 실제 객체 생성

Page 8: Builder, prototype, singleton pattern

Implements

1. 조합, 구축에필요한인터페이스정의

절차 상 추가 작업이 필요한 부분을 인터페이스로 정의

2. 제품객체의 추상화여부

만들어질 객체 간 공통점이 없는 경우 추상 클래스를 두지 않음

3. 일반적으로 Builder에서는객체의동작을구현하지않음

순수 가상 함수로 두지 않고 몸통을 비워둡니다

Open-Close Principle

Page 9: Builder, prototype, singleton pattern

Prototype원형이되는인스턴스를사용하여생성할객체의종류를명시하고, 이렇게만든견본을복사해서새로운객체를생성

Page 10: Builder, prototype, singleton pattern

Motive & Usability

무분별한서브클래싱 예방

범용 객체를 최대한 활용

객체생성 비용절약

초기 값은 유지하되 일부 값을 변경하여 사용

Factory와는 다르다! Factory와는!

클래스 그룹을 형성하지 않음

런타임에 클래스 결정

Factory로 생성하는 객체를 복제하는 방법으로 조합 가능

Page 11: Builder, prototype, singleton pattern

Structure & Contributors

Client

Operation()

Prototype

Clone()

p = prototype->Clone()

Prototype

Clone()

Prototype

Clone()

return copy of self return copy of self

Clone() 인터페이스정의

실제 Clone() 동작구현

갖다씀

Page 12: Builder, prototype, singleton pattern

Effect

런타임에새로운 객체추가/삭제

값, 구조를다양화하여 새로운객체정의

멤버 변수의 값에 따라 새로운 객체 정의

기본 골격만을 원형으로 제공하여 유연성 확보

서브클래스의수를 줄임

동적으로클래스에 따라응용프로그램 설정

Prototype Manager를 통해 클래스-프로그램 간 연결

Page 13: Builder, prototype, singleton pattern

Implements

1. Prototype Manager 사용

주로 Factory Method로 구현하거나 필요한 원형을 추가 등록

2. Clone() 구현

얕은 복사/깊은 복사를 잘 구분해야 합니다

3. Clone() 초기화

Clone()으로 객체 생성 이후 초기 값 설정

Initialize() 추가 구현

Page 14: Builder, prototype, singleton pattern

Singleton오직한개의클래스인스턴스만을갖도록보장, 전역적인접근점제공

=전역변수

Page 15: Builder, prototype, singleton pattern

Motive & Usability, Structure

전역변수의 객체지향버전

전역객체를 서브클래싱으로확장가능

Singleton

static Instance()

static uniqueInstance

Singleton Data

Page 16: Builder, prototype, singleton pattern

Effect

인스턴스접근 통제

namespace 오용 예방

연산및 표현방법 정리

Singleton을 상속 받아 필요한 클래스를 전역화

인스턴스개수변경가능

여러 개의 인스턴스에 대한 접근 방법 정의

정적연산 대체

Page 17: Builder, prototype, singleton pattern

Implements

1. 객체의유일성 보장

정적 객체의 인스턴스 선언은 한 곳에만 존재하게 구현

정적 객체의 초기화 시점에 초기화에 필요한 정보의 유무 확인

C++ 언어 차원에서 전역 객체의 생성 순서는 정의되어 있지 않음(undefined)

2. Singleton 서브클래싱

유일성이 보장된 서브클래스 관리

서브클래스 레지스트리

Page 18: Builder, prototype, singleton pattern

Implements

2. Singleton 서브클래싱

유일성이 보장된 서브클래스 관리

Page 19: Builder, prototype, singleton pattern

Summary

Page 20: Builder, prototype, singleton pattern

Summary

Factory – 그룹화 된클래스

Builder – 객체변환작업 or 객체생성작업에사용

Prototype – Ctrl + C, Ctrl + V

Singleton – 전역변수대체

Page 21: Builder, prototype, singleton pattern

Summary

Abstract Factory

virtual FactoryMethod() = 0

Singleton

Instance()Concrete Factory

virtual FactoryMethod()

Concrete Factory

virtual FactoryMethod()

Concrete Factory

virtual FactoryMethod()

FactoryMethod() {

return prototype->Clone();

}