参考:http://www.runoob.com/design-pattern/abstract-factory-pattern.html
C++代码实现:(为了简单演示,这些类的定义都在一个头文件中,具体使用的时候,应该分开文件存放)
#include <iostream>
using namespace std;
class Shape{
public:
virtual void draw() = 0;
};
class Rectangle : public Shape{
public:
void draw(){
cout << "Inside Rectangle::draw() method." << endl;
}
};
class Square : public Shape{
public:
void draw(){
cout << "Inside Square::draw() method." << endl;
}
};
class Circle : public Shape{
public:
void draw(){
cout << "Inside Circle::draw() method." << endl;
}
};
class Color{
public:
virtual void fill() = 0;
};
class Red : public Color{
public:
void fill(){
cout << "Inside Red:fill() methon." << endl;
}
};
class Green : public Color{
public:
void fill(){
cout << "Inside Green:fill() methon." << endl;
}
};
class Blue : public Color{
public:
void fill(){
cout << "Inside Blue:fill() methon." << endl;
}
};
class AbstractFactory{
public:
virtual Color* getColor(string color) = 0;
virtual Shape* getShape(string shape) = 0;
};
class ShapeFactory : public AbstractFactory{
public:
Shape* getShape(string shapeType){
if (shapeType.empty())
{
return NULL;
}
if (shapeType == "CIRCLE")
{
return new Circle();
}
else if (shapeType == "RECTANGLE")
{
return new Rectangle();
}
else if (shapeType == "SQUARE")
{
return new Square();
}
return NULL;
}
Color* getColor(string color){
return NULL;
}
};
class ColorFactory : public AbstractFactory{
public:
Shape* getShape(string shapeType){
return NULL;
}
Color* getColor(string color){
if (color.empty())
{
return NULL;
}
else if (color == "RED")
{
return new Red();
}
else if (color == "Green")
{
return new Green();
}
else if (color == "BLUE")
{
return new Blue();
}
return NULL;
}
};
class FactoryProducer
{
public:
static AbstractFactory* getFactory(string choice){
if (choice == "SHAPE")
{
return new ShapeFactory();
}
else if (choice == "COLOR")
{
return new ColorFactory();
}
return NULL;
}
};
测试:
#include "AbstractFactory.h"
int main()
{
//获取形状工厂
AbstractFactory* shapeFactory = FactoryProducer::getFactory("SHAPE");
//获取形状为Circle的对象
Shape* shape1 = shapeFactory->getShape("CIRCLE");
//调用Circle的draw方法
shape1->draw();
//获取形状为Rectangle的对象
Shape *shape2 = shapeFactory->getShape("RECTANGLE");
//调用Rectangle的draw方法
shape2->draw();
//获取形状为Square的对象
Shape *shape3 = shapeFactory->getShape("SQUARE");
//调用Square的draw方法
shape3->draw();
//获取颜色工厂
AbstractFactory* colorFactory = FactoryProducer::getFactory("COLOR");
//获取颜色为Red的对象
Color *color1 = colorFactory->getColor("RED");
//调用Green的fill方法
color1->fill();
//获取颜色为Green的对象
Color *color2 = colorFactory->getColor("Green");
//调用Red的fill方法
color2->fill();
//获取颜色为Blue的对象
Color *color3 = colorFactory->getColor("BLUE");
//调用Blue的fill方法
color3->fill();
getchar();
return 0;
}
运行结果:
原文链接: https://www.cnblogs.com/hpcpp/p/8404509.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/268746
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!