//객체의 이벤트 처리
#include <iostream>
using namespace std;
enum { BTN_OK, BTN_CANCEL }; //R.java in Android
class Button {
private:
struct OnClickListener;
OnClickListener* listener;
// 현재 버튼을 시작별하기 위하여 아이디를 설정
int id;
public:
Button(int i) : id(i) {}
//버튼의 이벤트를 처리하는 모든 객체는 아래의 인터페이스를 구현해야 한다.
struct OnClickListener {
virtual ~OnClickListener() {}
virtual void onClick(Button& btn) = 0;
};
int getId() { return id; };
void setOnClickListener(OnClickListener* p) { listener=p; };
void click() { listener->onClick(*this); }
};
class MainActivity : public Button::OnClickListener {
public:
void onClick(Button& btn) {
switch(btn.getId()) {
case BTN_OK: cout << "clicked ok button" << endl; break;
case BTN_CANCEL: cout << "clicked cancel button" << endl; break;
}
}
};
int main() {
MainActivity activity;
Button btnOK(BTN_OK); btnOK.setOnClickListener(&activity);
Button btnCancel(BTN_CANCEL); btnCancel.setOnClickListener(&activity);
getchar();
btnOK.click();
getchar();
btnCancel.click();
}
// 인터페이스 기반의 이벤트 처리 메커니즘 : Java의 Swing, Android의 GUI, 타이젠(삼성)
'Developer > Design Patterns' 카테고리의 다른 글
범용 함수 포인터의 설계 (0) | 2014.05.18 |
---|---|
함수 포인터 기반의 이벤트 핸들링 기법 (0) | 2014.05.18 |
State Pattern (0) | 2014.05.18 |
Strong Pointer & Weak Pointer (0) | 2014.05.18 |
Proxy Pattern을 이용한 스마트포인터 방식 (0) | 2014.05.18 |