#include
//#define SIMPLE
#define ROBUST
class Shape
{
public:
Shape() { id_ = total_++; }
virtual void draw() = 0;
protected:
int id_;
static int total_;
};
int Shape::total_ = 0;
class Circle : public Shape
{
public:
void draw() { cout << "circle " <<>
};
class Square : public Shape
{
public:
void draw() { cout << "square " <<>
};
class Ellipse : public Shape
{
public:
void draw() { cout << "ellipse " <<>
};
class Rectangle : public Shape
{
public:
void draw() { cout << "rectangle " <<>
};
class Factory
{
public:
virtual Shape* createCurvedInstance() = 0;
virtual Shape* createStraightInstance() = 0;
};
class SimpleShapeFactory : public Factory
{
public:
Shape* createCurvedInstance() { return new Circle; }
Shape* createStraightInstance() { return new Square; }
};
class RobustShapeFactory : public Factory
{
public:
Shape* createCurvedInstance() { return new Ellipse; }
Shape* createStraightInstance() { return new Rectangle; }
};
void main()
{
#ifdef SIMPLE
Factory* factory = new SimpleShapeFactory;
#else ROBUST
Factory* factory = new RobustShapeFactory;
#endif
Shape* shapes[3];
shapes[0] = factory->createCurvedInstance(); // shapes[0] = new Ellipse;
shapes[1] = factory->createStraightInstance(); // shapes[1] = new Rectangle;
shapes[2] = factory->createCurvedInstance(); // shapes[2] = new Ellipse;
for (int i=0; i <>
shapes[i]->draw();
}
0 comments;Click here for request info on this topic:
Post a Comment