일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
# 전역객체로서의 싱글턴 손쉽게 개발자간의 약속을 하여 주석 등으로 단 한번만 인스턴스 하도록 하는 것이다. struct Database{ /** * \brief 이 객체를 두 개 이상 인스턴스화 하지 마시오. */ Database(){} }; 하지만 의도하지 않은 은밀한 방식으로 생성자가 호출되어 버릴 수도 있다. 가장 간단한 아이디어는 static 전역 객체를 두는것이다. static Database database{}; static 전역객체의 문제점은 각각의 컴파일 단위 바이너리들에서 초기화 순서가 정의되어 있지 않다는 것이다. 전역객체가 여러 개 사용된다면 어느 한 모듈에서 전역 객체를 참조할 때 그 전역 객체가 참조하는 또 다른 전역 객체가 아직 초기화된 상태가 아닐 수 있다. 그리고 사용자가 ..
책에선 클래스, 스폰 함수, 템플릿을 사용하여 프로토타입 패턴을 작성했다. 막상 작성하고 나니 프로토타입 패턴이라기 보단 Spawner를 만드는 것 같았지만 뒤에 코드없이 설명만 해둬서 그냥 내 입맛에 맞게 수정하였다. 수정할때 이전에 C++디자인패턴에서 배웠던 프로토타입 팩토리를 추가해서 프로토타입을 만들도록 하였다. 생성하는 과정이 복잡한데, 나중에 빌더 패턴하고 합쳐서 예쁘게 사용하면 좋을 듯 싶다. - 클래스 기반 프로토타입 생성 더보기 class Spawner { public: virtual ~Spawner(){} Spawner(Monster* prototype) : prototype_(prototype){} Monster* spawnMonster(){ return prototype_->clon..
자주 복제해서 사용할 기본 객체들이 미리 정해져있다면 프로토타입 팩터리를 사용하는 것이 좋을 수 있다. 전역변수를 선언하여 복제해 사용해도 좋겠지만 프로토타입을 저장한 별도의 클래스를 두고 사용자가 원할 때, 목적에 맞는 복제본을 요구받는 시점에 만들어 제공하는 것이다. 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..
책에서는 직렬화도 소개한다. (모던CPP디자인패턴/https://book.naver.com/bookdb/book_detail.nhn?bid=14742427) 직렬화는 어떠한 객체 데이터를 비트의 나열로 만들어 파일로 저장하거나 네트워크로 전송할 수 있게 하는것을 말한다. 직렬화를 사용하면 객체복제를 쉽게 할 수 있게 만든다. 객체를 비트열로 나타내고 역직렬화를 통해 모든 정보와 내부 구성요소들을 복구 할 수 있다. 이 작업은 복제작업과 동일하다. C++은 아쉽게도 직렬화를 표준으로 지원하지 않는다. Boost 라이브러리를 사용하여 지원하지만 나는 라이브러리나 코드생성기의 도움 없이 코드를 구현하고 싶다... 전체 코드 : #include #include #include #include #include u..
# 객체 생성 아래의 두 객체는 중복된 부분이 있다. contact john{ "John Doe", Address{"123 East Dr", "London", 10}}; contact jane{ "Jane Doe", Address{"123 East Dr", "London", 11}}; john과 jane은 사무실 방만 다르고 같은 건물에서 일하고 있다. (다른 사람들도) 수많은 객체가 같은 값으로 중복되게 초기화 되는 작업이 발생한다. 프로토타입 패턴은 객체의 복제가 주요기능이다. # 평범한 중복처리 복제의 목적이 값을 사용하는 것에 있고, 복제 대상 객체의 모든 항목이 값으로만 되어있다면 복제하는데 문제 될 것이 없다. 예로 연락처와 주소가 다음과 같이 정의되어 있다면, struct Address{ s..
책 : 게임 프로그래밍 패턴 (https://book.naver.com/bookdb/book_detail.nhn?bid=10615724) 참고 블로그 글 : https://boycoding.tistory.com/107?category=959177 C++ 디자인 패턴 03. 관찰자 패턴, 옵저버 패턴, Observer Pattern 관찰자 패턴, 옵저버 패턴, Observer Pattern 객체 사이에 일 대 다의 의존 관계를 정의해두어, 어떤 객체의 상태가 변할 때 그 객체에 의존성을 가진 다른 객체들이 그 변화를 통지 받고 자동으로 업에이트될 수.. boycoding.tistory.com 관찰자 패턴은 이대로 사용하면 종속성 문제와 같은 문제들도 클 것 같다... C++ 디자인 패턴 책에서 이러한 문제..