본문 바로가기
반응형

디자인패턴12

[C++]Design Pattern - 변하는 것을 분리하기 [문제점] 가령 이름, 나이, 주소 등을 입력하는 EditBox가 있고, 각 EditBox는 입력 목적에 따라 허용 문자를 달리 할 수 있도록(정책) EditBox를 구현해보자. 다음의 코드는 이에 대한 예가 될 수 있겠다. #include #include #include using namespace std; class Edit { string data; public: virtual bool validate(char c) { return isdigit(c); } string getData() { data.clear(); while (1) { // 한글자 입력 받기 char c = _getch(); // Enter Key > 입력 완료 if (c == 13) break; // 입력 유효성 검사 (정책) i.. 2020. 12. 1.
[C++]Design Pattern - 변하는 것을 분리하기 [문제점] 가령 이름, 나이, 주소 등을 입력하는 EditBox가 있고, 각 EditBox는 입력 목적에 따라 허용 문자를 달리 할 수 있도록(정책) EditBox를 구현해보자. 다음의 코드는 이에 대한 예가 될 수 있겠다. #include #include #include using namespace std; class Edit { string data; public: virtual bool validate(char c) { return isdigit(c); } string getData() { data.clear(); while (1) { // 한글자 입력 받기 char c = _getch(); // Enter Key > 입력 완료 if (c == 13) break; // 입력 유효성 검사 (정책) i.. 2020. 12. 1.
[C++] Design Pattern - Template Method 기법 Template method 기법 - 모든 도형에 공통적으로 변하지 않는 전체적인 흐름을 기반 클래스에서 제공하고 - 각 도형 별로 변해야 하는 부분을 가상 함수로 제공해서 파생 클래스가 재정의 할 수 있게 한다. #include #include using namespace std; class Shape { public: // [문제] 가상의 멀티스래드 세이프에 대한 고려 virtual void Draw() final { // 변하는 것을 가상함수로 뽑아낸다. // -> Lock, Unlock 은 변화하지 않는 코드 // -> 실재 그리기 로직만 변화가 있는 코드이다. -> 이것을 함수로 빼냄 -> DrawImp() cout private 또는 protected virtual Shape* Clone() .. 2020. 11. 25.
[C++] 예제로 배우는 객체 지향(Prototype Pattern) Copy & Paste 기능 추가하기 타입코드를 사용하는 방법 새로운 도형이 추가되면 기존 코드가 수정(추가)된다. OCP를 만족하지 못한다. 가상함수를 사용하는 방법 새로운 도형이 추가 되어도 기존 코드가 수정되지 않는다. OCP를 만족한다. "Prototype"이라 불리는 디자인 패턴 // Exmaples.cpp : 이 파일에는 'main' 함수가 포함됩니다. 거기서 프로그램 실행이 시작되고 종료됩니다. // #include #include using namespace std; class Shape { public: int type; virtual void Draw() { cout 가상함수를 사용하는 방법 /*switch (v[k]->type) { case 1: case 2: case 3: break.. 2020. 11. 25.
반응형