C语言中怎么实现简单工厂模式

简单工厂模式简介

简单工厂模式是一种创建型设计模式,它使用一个单独的工厂方法来创建所有的对象。在简单工厂模式中,一个工厂类负责创建不同种类的对象,而客户端只需要通过传入不同的参数来获取所需要的对象实例。

实现简单工厂模式的方法

实现简单工厂模式需要以下几个步骤:

1. 创建一个抽象类或接口

抽象类或接口用来定义需要创建的所有对象的共同属性和行为。这个抽象类或接口的存在,可以让工厂方法统一处理所有的对象实例,达到代码复用的目的。

2. 创建具体的对象实例

根据需求和设计规则,实现具体的对象类,并且继承或实现抽象类或接口,这样所有的对象都将以同样的方式进行创建和使用。

3. 创建工厂类

创建一个工厂类,用于根据传入的参数来创建具体的对象实例。工厂类通常只有一个静态方法,它根据传入的参数,选择并创建具体的对象,并将其返回给客户端。同时,这个方法可以根据需要,进行额外的处理或者加入保证返回的对象符合设计规则的逻辑。

简单工厂模式的示例代码

下面是一个简单的实现简单工厂模式的示例代码。假设有一个需求是创建形状对象,并根据形状类型(圆形、矩形、三角形)来进行具体的操作。

“`c
#include

// 定义形状类型
typedef enum {
CIRCLE,
RECTANGLE,
TRIANGLE
} ShapeType;

// 定义形状抽象类
typedef struct {
ShapeType type; // 形状类型
float area; // 面积
} Shape;

// 定义具体形状类
typedef struct {
Shape shape; // 继承Shape类
float radius; // 圆形半径
} Circle;

typedef struct {
Shape shape; // 继承Shape类
float width; // 矩形宽度
float height; // 矩形高度
} Rectangle;

typedef struct {
Shape shape; // 继承Shape类
float base; // 三角形底边
float height; // 三角形高度
} Triangle;

// 定义简单工厂类
typedef struct {
Shape *(*create)(ShapeType type); // 创建具体形状对象的工厂方法
} ShapeFactory;

// 创建具体形状对象的工厂方法
Shape *createShape(ShapeType type) {
Shape *shape = NULL;
switch (type) {
case CIRCLE:
shape = (Shape *)malloc(sizeof(Circle));
memset(shape, 0, sizeof(Circle));
shape->type = CIRCLE;
((Circle *)shape)->radius = 5.0;
break;
case RECTANGLE:
shape = (Shape *)malloc(sizeof(Rectangle));
memset(shape, 0, sizeof(Rectangle));
shape->type = CIRCLE;
((Rectangle *)shape)->width = 4.0;
((Rectangle *)shape)->height = 3.0;
break;
case TRIANGLE:
shape = (Shape *)malloc(sizeof(Triangle));
memset(shape, 0, sizeof(Triangle));
shape->type = CIRCLE;
((Triangle *)shape)->base = 4.0;
((Triangle *)shape)->height = 3.0;
break;
default:
break;
}
return shape;
}

int main() {
ShapeFactory shapeFactory;
shapeFactory.create = &createShape;

Shape *circleShape = shapeFactory.create(CIRCLE);
printf(“Circle area = %f\n”, circleShape->area);
free(circleShape);

Shape *rectangleShape = shapeFactory.create(RECTANGLE);
printf(“Rectangle area = %f\n”, rectangleShape->area);
free(rectangleShape);

Shape *triangleShape = shapeFactory.create(TRIANGLE);
printf(“Triangle area = %f\n”, triangleShape->area);
free(triangleShape);

return 0;
}
“`

这份示例代码定义了一个Shape类的基础抽象类,以及Circle、Rectangle、Triangle三种具体形状类。同时还定义了ShapeFactory工厂类,用于创建具体形状实例。

最后的main()函数展示了如何使用工厂方法来创建不同的形状实例。

© 版权声明
THE END
喜欢就支持一下吧
点赞14 分享