#include <iostream>
#include <string>
#include <conio.h>
using namespace std;
//인터페이스 기반
//변하는 것(세부 정책)을 다른 클래스로 분리하여 교체 가능하도록 설계하는 패턴을
//전략 패턴이라고 한다.
struct IValidator {
virtual ~IValidator() {}
virtual bool validate(char ch) = 0;
};
class LineEidt {
string text;
IValidator *pValidator;
public:
LineEidt() : pValidator(0) {}
void setValidator(IValidator* p) { pValidator = p; }
string getText() {
text.clear();
while(true) {
char ch=_getch(); //표준 입력 스트림으로부터 문자 하나를 읽어온다.
if(ch==13) break;
if(pValidator==0 || pValidator->validate(ch)) {
text.push_back(ch);
cout << ch;
}
}
cout << endl;
return text;
}
};
class NumberValidator : public IValidator {
public:
bool validate(char ch) { return isdigit(ch) ? true : false; }
};
class NumberLineEdit : public LineEidt {
bool validate(char ch) { return isdigit(ch)? true : false; }
};
int main() {
NumberLineEdit edit;
NumberValidator nVal;
edit.setValidator(&nVal);
while(true) {
string s = edit.getText();
cout << s << endl;
}
return 0;
}
'Developer > Design Patterns' 카테고리의 다른 글
디자인 패턴 책 (0) | 2014.05.18 |
---|---|
Template Method Pattern (0) | 2014.05.18 |
범용 함수 포인터의 설계 (0) | 2014.05.18 |
함수 포인터 기반의 이벤트 핸들링 기법 (0) | 2014.05.18 |
인터페이스 기반의 객체의 이벤트 처리 (0) | 2014.05.18 |