类比
待续…
C++代码举例
#include <iostream>
using namespace std;
typedef enum {RECTANGLE, CIRCLE, SQUARE} ShapeType;
class IShape
{
public:
virtual void draw() = 0;
};
class Rectangle : public IShape
{
public:
void draw()
{
cout << "Inside draw() of class Rectangle\n";
}
};
class Circle : public IShape
{
public:
void draw()
{
cout << "Inside draw() of class Circle\n";
}
};
class Square : public IShape
{
public:
void draw()
{
cout << "Inside draw() of class Square\n";
}
};
class ShapeFactory
{
public:
static IShape* create(ShapeType type)
{
if (type == RECTANGLE)
{
return new Rectangle();
}
else if (type == CIRCLE)
{
return new Circle();
}
else if (type == SQUARE)
{
return new Square();
}
else
{
cout << "===> non valid shape type\n";
return NULL;
}
}
};
int main()
{
IShape* pShape = NULL;
pShape = ShapeFactory::create(RECTANGLE);
if (pShape != NULL)
{
pShape->draw();
delete pShape;
}
else
{
cerr << "Error in ShapeFactory\n";
return 1;
}
pShape = ShapeFactory::create(CIRCLE);
if (pShape != NULL)
{
pShape->draw();
delete pShape;
}
else
{
cerr << "Error in ShapeFactory\n";
return 1;
}
pShape = ShapeFactory::create(SQUARE);
if (pShape != NULL)
{
pShape->draw();
delete pShape;
}
else
{
cerr << "Error in ShapeFactory\n";
return 1;
}
return 0;
}
输出如下,