factory function (팩토리 함수)
새로 생성된 파생 클래스 객체에 대한 기본 클래스 포인터를 반환하는 함수.
class TimeKeeper
{
public:
TimeKeeper(void);
virtual ~TimeKeeper(void);
};
// 시간 계산이 어떻게 되는지 몰라도 시간 기록을 유지하기 위한 클래스들.
class AtomicClock : public TimeKeeper
{
public:
AtomicClock(void)
{
cout<<"Atom"<<"\n";
}
~AtomicClock(void){};
};
class WaterClock : public TimeKeeper
{
public:
WaterClock(void)
{
cout<<"Water"<<"\n";
}
~WaterClock(void){};
};
class WristWatch : public TimeKeeper
{
public:
WristWatch(void)
{
cout<<"Wrist"<<"\n";
}
~WristWatch(void){};
};
// 시계 생성 기본 클래스
class ClockMaker
{
public:
// 새로 생성된 파생 클래스 객체에 대한 기본 클래스 포인터를 반환하는 함수.
TimeKeeper* GetClock(string& name)
{
TimeKeeper* timeKeeper = MakeClock(name);
// 이런저런일을 하자꾸나.
return timeKeeper;
}
protected:
virtual TimeKeeper* MakeClock(string& name)=0;
};
class TimeClockMaker : public ClockMaker
{
public:
// name에 따라 원하는 파생형으로 만들어서 반환.
TimeKeeper* MakeClock(string& name)
{
TimeKeeper* timeKeeper = NULL;
if(string("Atomic") == name)
{
timeKeeper = new AtomicClock;
}
else if(string("Water") == name)
{
timeKeeper = new WaterClock;
}
else if(string("Wrist") == name)
{
timeKeeper = new WristWatch;
}
return timeKeeper;
}
};
int _tmain(int argc, _TCHAR* argv[])
{
TimeKeeper* waterClock = NULL;
TimeClockMaker* maker = new TimeClockMaker;
string clockName = "Water";
waterClock = maker->GetClock(clockName);
return 0;
}
'Study > C++' 카테고리의 다른 글
int와 float 연산 (0) | 2016.09.29 |
---|---|
random (0) | 2014.11.29 |
Hash 함수 모음 (0) | 2011.04.22 |
boost::has_trivial_assign (0) | 2011.04.10 |
메모리맵 파일 (0) | 2011.04.09 |