#include <iostream>
using namespace std;
// factory : 객체 생성을 클래스화 해라.
// 도형 편집기를 만들고 싶다.
class Shape { };
class Rect : public Shape {};
class Circle : public Shape {};
// 이제 도형을 생성하는 공장의 인터페이스를 구현한다.
class IShapeFactory
{
public:
virtual Shape* CreateShape( char c ) = 0;
};
class FactoryVer1 : public IShapeFactory
{
public:
virtual Shape* CreateShape( char c )
{
switch( c )
{
case 'C':
return new Circle;
case 'R':
return new Rect;
}
}
};
class FactoryVer2 : public IShapeFactory
{
public:
virtual Shape* CreateShape( char c )
{
switch( c )
{
case 'C':
return new Circle;
case 'R':
return new Rect;
case 'T':
return new Triangle; // 확장의 유용성!!
}
}
};
class Canvas
{
vector<Shape*> shapes;
IShapeFactory* factory;
public:
void Save()
{
}
void Load()
{
// 어떤 객체인지 표시를 읽어내고, 해당 data를 읽은 후에
char c = Read();
char data = Read();
shapes.push_back( factory->CreateShape( c ) ); // 위임한다.
//switch( c )
//{
//case 'R':
// shapes.push_back( new Rect(data) );
// break;
//case 'C':
// shapes.push_back( new Circle(data) );
// break;
//}
}
void KeyDown( char c )
{
shape.push_back( factory->CreateShape( c ) ); // 위임한다.
//switch( c )
//{
//case 'R':
// shapes.push_back( new Rect );
// break;
//case 'C':
// shapes.push_back( new Circle );
// break;
//}
}
};