抽象工厂C++示例
抽象工厂UML图:
//AbstractFactory.h
#ifndef ABSTRACTFACTORY_H
#define ABSTRACTFACTORY_H
class AbstractProduct;
class AbstractFactory
{
public:
virtual AbstractProduct *createjipu()=0;
virtual AbstractProduct* createcar()=0;
};
#endif
//AbstractProduct.h
#ifndef ABSTRACTPRODUCT_H
#define ABSTRACTPRODUCT_H
class AbstractProduct
{
public:
virtual void color()=0;
virtual void shape()=0;
};
#endif
//AbstractProductPlane.h
#ifndef ABSTRACTPRODUCTCAR_H
#define ABSTRACTPRODUCTCAR_H
#include "AbstractProduct.h"
class AbstractProductCar:public AbstractProduct
{
public:
virtual void color()=0;
virtual void shape()=0;
};
#endif
//AbstractProductJiPu.h
#ifndef ABSTRACTPRODUCTJIPU_H
#define ABSTRACTPRODUCTJIPU_H
#include "AbstractProduct.h"
class AbstractProductJiPu:public AbstractProduct
{
public:
virtual void color()=0;
virtual void shape()=0;
};
#endif
//Factory1.h
//汽车厂1
#ifndef FACTORY1_H
#define FACTORY1_H
#include "AbstractFactory.h"
class Factory1:public AbstractFactory
{
public:
public:
virtual AbstractProduct *createjipu();
virtual AbstractProduct* createcar();
};
#endif
//Factory1.cpp
#include <QString>
#include "Factory1.h"
#include "ProductJiPu1.h"
#include "ProductCar1.h"
AbstractProduct *Factory1::createjipu()
{
return new ProductJiPu1();
}
AbstractProduct *Factory1::createcar()
{
return new ProductCar1();
}
//Factory2.h
//汽车厂2
#ifndef FACTORY2_H
#define FACTORY2_H
#include "AbstractFactory.h"
class Factory2:public AbstractFactory
{
public:
virtual AbstractProduct *createjipu();
virtual AbstractProduct* createcar();
};
#endif
//Factory2.cpp
#include <QString>
#include "Factory2.h"
#include "ProductJiPu2.h"
#include "ProductCar2.h"
AbstractProduct *Factory2::createjipu()
{
return new ProductJiPu2();
}
AbstractProduct *Factory2::createcar()
{
return new ProductCar2();
}
//ProductCar1.h
#ifndef PRODUCTCAR1_H
#define PRODUCTCAR1_H
#include "AbstractProductCar.h"
class ProductCar1:public AbstractProductCar
{
public:
ProductCar1();
virtual void color();
virtual void shape();
};
#endif
//ProductCar1.cpp
#include <QDebug>
#include "ProductCar1.h"
ProductCar1::ProductCar1()
{
}
void ProductCar1::color()
{
qDebug("The color of ProductCar1 is black");
}
void ProductCar1::shape()
{
qDebug("The shape of ProductCar1 is square");
}
//ProductCar2.h
#ifndef PRODUCTCAR2_H
#define PRODUCTCAR2_H
#include "AbstractProductCar.h"
class ProductCar2:public AbstractProductCar
{
public:
ProductCar2();
virtual void color();
virtual void shape();
};
#endif
//ProductCar2.cpp
#include <QDebug>
#include "ProductCar2.h"
ProductCar2::ProductCar2()
{
}
void ProductCar2::color()
{
qDebug("The color of ProductCar2 is red");
}
void ProductCar2::shape()
{
qDebug("The shape of ProductCar2 is Circle");
}
//ProductJiPu1.h
#ifndef PRODUCTJIPU1_H
#define PRODUCTJIPU1_H
#include "AbstractProductJiPu.h"
class ProductJiPu1:public AbstractProductJiPu
{
public:
ProductJiPu1();
virtual void color();
virtual void shape();
};
#endif
//ProductJiPu1.cpp
#include <QDebug>
#include "ProductJiPu1.h"
ProductJiPu1::ProductJiPu1()
{
}
void ProductJiPu1::color()
{
qDebug("The color of ProductJiPu1 is black");
}
void ProductJiPu1::shape()
{
qDebug("The shape of ProductJiPu1 is square");
}
//ProductJiPu2.h
#ifndef PRODUCTJIPU2_H
#define PRODUCTJIPU2_H
#include "AbstractProductJiPu.h"
class ProductJiPu2:public AbstractProductJiPu
{
public:
ProductJiPu2();
virtual void color();
virtual void shape();
};
#endif
//ProductJiPu2.cpp
#include <QDebug>
#include "ProductJiPu2.h"
ProductJiPu2::ProductJiPu2()
{
}
void ProductJiPu2::color()
{
qDebug("The color of ProductJiPu2 is red");
}
void ProductJiPu2::shape()
{
qDebug("The shape of ProductJiPu2 is Circle");
}