일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 프로토타입 중복처리
- 데커레이터
- 빌더
- 단순한 빌더
- 동적 데커레이터
- 추상 팩터리
- 프로토타입 패턴
- 팩터리 패턴
- 흐름식 빌더
- 모던C++디자인패턴
- 내부 팩터리
- 컴포지트 패턴
- 동적 데코레이터
- 함수형 팩터리
- 싱글턴
- 디자인 패턴
- 싱글톤 패턴
- 브릿지
- 그루비 스타일 빌더
- 데커레이터 패턴
- 디자인패턴
- 브릿지 패턴
- 컴포지트
- 팩터리
- 싱글턴 패턴
- 컴포지트 빌더
- 싱글톤
- 빌더 패턴
- 프로토타입
- 팩터리 메서드
- Today
- Total
목록Design Pattern (26)
GGym's Practice Notes
# 추상팩터리 그동안 객체 한개를 생성하는 경우를 살펴봤다. 드물지만 여러 종류의 연관된 객체를 생성해야 할 경우도 있다. 추상 팩터리는 그러한 경우를 위한 패턴이다. 뜨거운 차와 커피를 판매하는 카페를 운영해야한다고 가정했을때, 이 두 음료는 다른 장비를 이용해 만들어진다. 다음과 같이 뜨거운 음료를 추상화하는 HotDrink를 정의한다. struct HotDrink{ virtual void prepare(int volume) = 0; }; struct Tea : HotDrink{ void prepare(int volume) override{ cout
# 시나리오 직교 좌표계의 좌표점 정보를 저장하려 한다고 하면 아래와 같이 구현할 것이다. struct Point{ // 직교 좌표계 생성자 Point(const float x, const float y) : x{x}, y{y} {} // 극 좌표계 생성자 Point(const float r, const float theta){ x = r * cos(theta); y = r * sin(theta); } // 두개의 생성자 오버로딩이 겹친다... (float, float) float x, y; // 직교 좌표계 좌표값 } 이때 직교좌표계가 아닌 극좌표계를 추가하고 극좌표계의 좌표값으로 저장한다고 하면 문제가 된다. 쉽게 생각하면 극좌표계용 생성자를 추가하면 되지 않을가 싶지만 직교 좌표계의 생성자와 구분이..
컴포지트 빌더는 객체 하나를 생성하는데 복수의 빌더가 사용되는 경우 사용된다. BuilderBase에 여러개의 builder를 두어 객체가 생성되게 한다. 객체가 생성될때는 아래와 같이 생성된다. Person p = Person::create() .lives().at("123 London Road").with_postcode("SW1 1GB").in("London") .works().at("PragmaSoft").as_a("Consultant").earning(10e6); * 저자는 참조를 사용하였지만 코드가 에러를 계속 에러를 뱉어낸다. 아마 PersonBuilder에서 생성된 객체가 PersonBuilderBase로 참조될 때 유지가 안되는 것 같다. 참조를 포인터로 변경하여 에러를 고쳤다. - 전체..
C++ 에서도 HTML에 호환되는 DSL을 효과적으로 만들 수 있다. DSL (Domain Specific Languege) : 도메인 특화 언어 관련 특정 분야에 최적화된 프로그래밍 언어. (*Groovy, Kotlin에서 생성 지원) 해당 분야 또는 도메인의 개념과 규칙을 사용 아래와 같은 태그를 생성한다. struct Tag{ string name; string text; vector children; vector attribute; friend ostream& operator
빌더 패턴은 생성이 까다로운 객체를 쉽게 처리하기 위한 패턴이다. 즉, 생성자 호출 코드 단 한 줄로 생성할 수 없는 객체를 다룬다. - 시나리오 웹 페이지를 그리기위한 컴포넌트들을 생성해야 한다고 할때 각각의 HtmlElement를 생성하는 과정을 간소화 한다. 객체 지향 스타일을 채용하여 HtmlElement 클래스를 정의하여 각 html 태그에 대한 정보를 저장한다. struct HtmlElement{ string name; string text; vector elements; string str(int indent = 0) const{ // 컨텐츠를 양식에 맞추어 출력 } HtmlElement(){} HtmlElement(const string& name, const string& text) : ..
각각의 커맨드들이 스택에 맞추어 실행된다. 커맨드는 0 0 1 5 0 50 2 으로 아래와 같이 명령이 실행된다. 0 : 0 push 1 : 0 pop ( 오브젝트 리스트 0 ) 5 : 0 의 체력 가져옴 ( 체력 출력 ) 0 : 50 push 2 : 50 pop ( 체력 설정) #include #include using namespace std; void assert(bool check){ if(!check); // 예외발생 } // 바이트코드 enum Instruction{ INST_LITERAL = 0x00, INST_OBJECT = 0x01, INST_SET_HEALTH = 0x02, INST_SET_WISDOM = 0x03, INST_SET_AGILITY = 0x04, INST_GET_HEALT..