Wednesday, August 29, 2007

ABATRACT FACTORY DESIGN PATTERN


Basic conceptualization through source code.


#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