일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
목록디자인패턴 (5)
GGym's Practice Notes
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
이전 코드는 문제가 되는 상황이 있다. 화면이 업데이트 될때마다 DrawPoints()가 불리는 경우를 생각한다. 전혀 바뀐 것이 없더라도 도형의 선분들이 어댑터에 의해 반복적으로 점으로 변환된다. 비효율적인 중복 작업을 피하기 위해 캐싱을 이용한다. 모든 어플리케이션이 기동할 때 미리 어댑터를 이용해 정의해 두고 재활용하는 것이다. vector points; for(auto& o : vectorObjects){ for(auto& l : *o){ LineToPointAdapter lpo{l}; for(auto& p : lpo){ points.push_back(p); } } }
모노스테이트는 싱글턴의 변형이다. 겉보기엔 일반 클래스 같지만 싱글턴처럼 동작한다. class Printer{ static int id; public: int get_id() const{ return id;} void set_id(int value) { id = value;} }; static 데이터를 이용하여 get/set 멤버함수가 구현되어 있다. 문제는 사용자가 일반 클래스로 알고 인스턴스를 만들어 다른 ID를 부여하지만 두 객체의 ID는 모두 같아진다. 모노스테이트의 장단점 장점 - 상속받기 쉬워 다형성을 활용할 수 있다. - 생존 주기가 적절히 잘 정의된다. - 시스템에서 사용 중인 이미 존재하는 객체를 수정하여 이용할 수 있다. 단점 - 코드 깊숙이 손을 댄다. (일반 객체를 모노스테이트로 변..
자주 복제해서 사용할 기본 객체들이 미리 정해져있다면 프로토타입 팩터리를 사용하는 것이 좋을 수 있다. 전역변수를 선언하여 복제해 사용해도 좋겠지만 프로토타입을 저장한 별도의 클래스를 두고 사용자가 원할 때, 목적에 맞는 복제본을 요구받는 시점에 만들어 제공하는 것이다. struct EmployeeFactory{ static Contact main; static Contact aux; static unique_ptr NewMainOfficeEmployee(string name, int suite){ return NewEmployee(name, suite, main); } static unique_ptr NewAuxOfficeEmployee(string name, int suite){ return NewE..
빌더 패턴은 생성이 까다로운 객체를 쉽게 처리하기 위한 패턴이다. 즉, 생성자 호출 코드 단 한 줄로 생성할 수 없는 객체를 다룬다. - 시나리오 웹 페이지를 그리기위한 컴포넌트들을 생성해야 한다고 할때 각각의 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) : ..