简单工厂(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

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/archive/2011/03/24/1993669.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/22734

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月8日 上午12:44
下一篇 2023年2月8日 上午12:44

相关推荐