简单工厂(C++)
Factory:工厂类,负责创建对应的子类(Shape).
MyShape:图形抽象父类.
Line:线
Circle:圆
Rectangle:矩形
ShapeType:图形类别枚举
文件组织
//MyShape.h
#pragma once
#include <iostream>
using namespace std;
class MyShape
{
public:
MyShape();
~MyShape();
public:
virtual void Draw()=0;
};
//-------------------
//MyShape.cpp
#include "MyShape.h"
MyShape::MyShape()
{
}
MyShape::~MyShape()
{
}
//==========================
//Line.h
#pragma once
#include "myshape.h"
class Line :
public MyShape
{
public:
Line();
~Line();
public:
virtual void Draw();
};
//---------------
//LIne.cpp
#include "Line.h"
Line::Line(void)
{
}
Line::~Line(void)
{
}
void Line::Draw()
{
cout<<"绘制线..."<<endl;
}
//===========================
//Circle.h
#pragma once
#include "myshape.h"
class Circle :
public MyShape
{
public:
Circle();
~Circle();
public:
virtual void Draw();
};
//------------------
//Circle.cpp
#include "Circle.h"
Circle::Circle(void)
{
}
Circle::~Circle(void)
{
}
void Circle::Draw()
{
cout<<"绘制圆..."<<endl;
}
//=================================
//Rectangle.h
#pragma once
#include "myshape.h"
class Rectangle :
public MyShape
{
public:
Rectangle(void);
~Rectangle(void);
public:
virtual void Draw();
};
//------------------------------
//Rectangle.cpp
#include "Rectangle.h"
Rectangle::Rectangle(void)
{
}
Rectangle::~Rectangle(void)
{
}
void Rectangle::Draw()
{
cout<<"绘制矩形"<<endl;
}
//=======================================
//EShpapeType.h
enum ShapeType
{
//矩形
ERectangle,
//圆形
ECircle,
//线
ELine
};
//Factory.h
#pragma once
#include "EShapeType.h"
#include "MyShape.h"
#include "Line.h"
#include "Circle.h"
#include "Rectangle.h"
class FactoryClass
{
public:
static MyShape* CreateShape(ShapeType type);
};
//---------------------------------
//Factory.cpp
#include "FactoryClass.h"
MyShape* FactoryClass::CreateShape( ShapeType type )
{
switch(type)
{
case ERectangle:
return new Rectangle();
case ECircle:
return new Circle();
case ELine:
return new Line();
}
}
//调用测试
#include <iostream>
using namespace std;
#include "FactoryClass.h"
void Func(MyShape *shape);
int main()
{
cout<<"绘制图形测试开始..."<<endl;
MyShape *shape = FactoryClass::CreateShape(ELine);
Func(shape);
shape = FactoryClass::CreateShape(ECircle);
Func(shape);
shape = FactoryClass::CreateShape(ERectangle);
Func(shape);
cout<<"Over..."<<endl;
}
void Func( MyShape *shape )
{
if (shape != NULL)
{
shape->Draw();
delete shape;
shape = NULL;
}
}
//结果: