简单工厂(C++)

image

Factory:工厂类,负责创建对应的子类(Shape).

MyShape:图形抽象父类.

Line:线

Circle:圆

Rectangle:矩形

ShapeType:图形类别枚举

文件组织

image

//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;
 }
}

//结果:

image

原文地址:https://www.cnblogs.com/sharpfeng/p/1993669.html