#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;

}

Posted by No names
,