介绍
http://www.runoob.com/design-pattern/abstract-factory-pattern.html
抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。
创建型模式。
实现
#include <iostream>
#include <string>
using namespace std;
class Shape
{
public:
virtual void Show()=0;
};
class Rectangle :public Shape
{
public:
void Show(){ cout<<"Rectangle"<<endl; }
};
class Circle : public Shape
{
public:
void Show(){ cout<<"Circle"<<endl; }
};
class Color
{
public:
virtual void fill()=0;
};
class Red:public Color
{
public:
void fill(){ cout<<"Red fill method"<<endl;}
};
class Black:public Color
{
public:
void fill(){ cout<<"Black fill method"<<endl;}
};
class AbstractFactory
{
public:
virtual Color* getColor(char* colorType) = 0;
virtual Shape* getShape(char* shapeType) = 0;
};
class ShapeFactory:public AbstractFactory
{
public:
Color* getColor(char* colorType){ return NULL;}
Shape* getShape(char* shapeType)
{
if (!strcmp(shapeType,"RECTANGLE"))
{
return new Rectangle();;
}
else if (!strcmp(shapeType,"CIRCLE"))
{
return new Circle();
}
return NULL;
}
};
class ColorFactory:public AbstractFactory
{
public:
Shape* getShape(char* shapeType){ return NULL;};
Color* getColor(char* colorType)
{
if (!strcmp(colorType,"RED"))
{
return new Red();;
}
else if (!strcmp(colorType,"BLACK"))
{
return new Black();
}
return NULL;
}
};
/*创建一个工厂创造器/生成器类,通过传递形状或颜色信息来获取工厂。*/
class FactoryProducer
{
public:
AbstractFactory* getFactory(char* factoryType)
{
if (!strcmp(factoryType,"SHAPE"))
{
return new ShapeFactory;
}
else if (!strcmp(factoryType,"COLOR"))
{
return new ColorFactory;
}
return NULL;
}
};
#include <string>
using namespace std;
class Shape
{
public:
virtual void Show()=0;
};
class Rectangle :public Shape
{
public:
void Show(){ cout<<"Rectangle"<<endl; }
};
class Circle : public Shape
{
public:
void Show(){ cout<<"Circle"<<endl; }
};
class Color
{
public:
virtual void fill()=0;
};
class Red:public Color
{
public:
void fill(){ cout<<"Red fill method"<<endl;}
};
class Black:public Color
{
public:
void fill(){ cout<<"Black fill method"<<endl;}
};
class AbstractFactory
{
public:
virtual Color* getColor(char* colorType) = 0;
virtual Shape* getShape(char* shapeType) = 0;
};
class ShapeFactory:public AbstractFactory
{
public:
Color* getColor(char* colorType){ return NULL;}
Shape* getShape(char* shapeType)
{
if (!strcmp(shapeType,"RECTANGLE"))
{
return new Rectangle();;
}
else if (!strcmp(shapeType,"CIRCLE"))
{
return new Circle();
}
return NULL;
}
};
class ColorFactory:public AbstractFactory
{
public:
Shape* getShape(char* shapeType){ return NULL;};
Color* getColor(char* colorType)
{
if (!strcmp(colorType,"RED"))
{
return new Red();;
}
else if (!strcmp(colorType,"BLACK"))
{
return new Black();
}
return NULL;
}
};
/*创建一个工厂创造器/生成器类,通过传递形状或颜色信息来获取工厂。*/
class FactoryProducer
{
public:
AbstractFactory* getFactory(char* factoryType)
{
if (!strcmp(factoryType,"SHAPE"))
{
return new ShapeFactory;
}
else if (!strcmp(factoryType,"COLOR"))
{
return new ColorFactory;
}
return NULL;
}
};
#include "shape.h"
int main()
{
FactoryProducer* all = new FactoryProducer;
AbstractFactory* shapefactory = all->getFactory("SHAPE");
Shape* shape1 = shapefactory->getShape("RECTANGLE");
shape1->Show();
AbstractFactory* colorfactory = all->getFactory("COLOR");
Color* color1 = colorfactory->getColor("RED");
color1->fill();
getchar();
//delete
return 0;
}
int main()
{
FactoryProducer* all = new FactoryProducer;
AbstractFactory* shapefactory = all->getFactory("SHAPE");
Shape* shape1 = shapefactory->getShape("RECTANGLE");
shape1->Show();
AbstractFactory* colorfactory = all->getFactory("COLOR");
Color* color1 = colorfactory->getColor("RED");
color1->fill();
getchar();
//delete
return 0;
}