일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- 프로토타입
- 디자인 패턴
- 싱글턴 패턴
- 팩터리 메서드
- 그루비 스타일 빌더
- 데커레이터 패턴
- 모던C++디자인패턴
- 내부 팩터리
- 동적 데코레이터
- 프로토타입 중복처리
- 흐름식 빌더
- 컴포지트 빌더
- 팩터리 패턴
- 브릿지 패턴
- 추상 팩터리
- 브릿지
- 싱글톤
- 단순한 빌더
- 팩터리
- 컴포지트
- 디자인패턴
- 프로토타입 패턴
- 데커레이터
- 동적 데커레이터
- 컴포지트 패턴
- 빌더
- 싱글턴
- 빌더 패턴
- 싱글톤 패턴
- 함수형 팩터리
- Today
- Total
목록Design Pattern (26)
GGym's Practice Notes
resize() 멤버 함수는 Shape 인터페이스와 관계가 없기 때문에 데커레이터에서 호출할 수 없다. 보통의 상속 대신 MixIn 상속이라 불리는 방식을 이용한다. static_assert를 이용해 Shape이외의 타입이 지정되는 것을 막는다. template struct ColoredShape : T{ static_assert(is_base_of::value, "template argument must be a Shape"); string color; string str() const override{ ostringstream oss; oss
데커레이터 패턴 : 어떤 기능에 추가적으로 기능을 덧붙이고 싶을 경우 그 기능들을 Decorator로 만들어서 덧붙이는 방식. 이미 존재하는 타입에 새로운 기능을 추가하면서도 원래 타입의 코드에 수정을 피할 수 있게 해준다. 시나리오 도형을 나타내는 Shape가 기존에 존재하고 있고 이를 상속받아 색상이 있는 도형과 투명한 도형을 추가한다. 나중에 두가지 속성을 모두 필요로 하는 경우가 발생하여 추가로 클래스를 만드는데 결과적으로 두가지 기능을 추가하기 위해 클래스를 3개 만들게 된다. 이런식이면 기능이 하나 추가될때마다 7개의 클래스를 만들어야 할 수도 있다. struct Shape{ virtual string str() const =0; }; struct Circle: Shape{ float radi..
개별 그래픽 객체를 렌더링할 수도 있고 여러 개의 도형을 하나의 그룹으로 렌더링할 수도 있다. 다음과 같은 인터페이스 하나면 충분하다. struct GraphicObject{ virtual void draw() = 0; }; 여러개의 사각형과 원들이 모인 그래픽 객체들도 집합적으로 하나의 그래픽 객체를 나타낼 수 있다. 원을 다음과 같이 정의할 수 있듯이 여기서 컴포지트 디자인 패턴이 드러난다. struct Circle : GraphicObject{ void draw() override{ std::cout
컴포지트 패턴 : 어떤 객체들의 집합에 대해 개별 인터페이스를 동일하게 가져갈 수 있게 하는 것 크리쳐 클래스를 정의한다. class Creature { int strength, agility, intelligence; public: int get_strength() const{ return strength; } void set_strength(int strength){ Creature::strength = strength; } // 다른 get/set 멤버 함수들... }; 통계를 내려면 단순하게 다음과 같이 만들어야 한다. 하지만 바람직하지 않다. class Creature{ // 다른 멤버들... int sum() const { return strength + agility + intelligenc..
#include // 임시 키 #define PRESS_B 'B' #define PRESS_DOWN 40 #define RELEASE_DOWN 41 // 상태를 열거형으로 정의 enum State{ STATE_STANDING, STATE_JUMPING, STATE_DUCKING, STATE_DIVING }; // 임시 키 입력을 위한 임시 클래스 struct Input{ bool operator==(char&& input){ if(input == key) return true; else return false; } private: char key; }; // 상태를 사용할 Heroine 클래스 struct Heroine{ Heroine(int maxCharge, int jumpVelocity) : MAX..
Pimpl 관례는 브릿지 패턴의 특별한 예이다. Renderer 클래스는 벡터, 래스터로 그릴 수 있다고 한다. Renderer 베이스 클래스는 다음과 같이 정의한다. struct Renderer{ virtual void render_circle(float x, float y, float radius) = 0; }; 실제로 그리지 않고 콘솔에 메세지를 출력한다. struct VectorRenderer : Renderer{ void render_circle(float x, float y, float radius) override{ cout