写个工厂模式 c++
时间: 2023-11-07 19:59:23 浏览: 37
工厂模式是一种常用的创建型设计模式,它提供了一种创建对象的方法,将其封装在一个类中,使得客户端只需要知道产品的接口而不需要关心具体的实现。下面是一个用C语言实现工厂模式的示例:
```
#include <stdio.h>
#include <stdlib.h>
// 定义产品接口
typedef struct {
void (*show)(void);
} Product;
// 定义具体产品A
typedef struct {
Product base;
char data[20];
} ProductA;
void showProductA(void) {
printf("This is ProductA: %s\n", ((ProductA*)self)->data);
}
// 定义具体产品B
typedef struct {
Product base;
int value;
} ProductB;
void showProductB(void) {
printf("This is ProductB: %d\n", ((ProductB*)self)->value);
}
// 定义工厂类
typedef struct {
Product *(*createProduct)(void);
} Factory;
// 生产具体产品A的工厂
Product *createProductA(void) {
ProductA *product = (ProductA*)malloc(sizeof(ProductA));
product->base.show = showProductA;
printf("Input data for ProductA: ");
scanf("%s", product->data);
return (Product*)product;
}
// 生产具体产品B的工厂
Product *createProductB(void) {
ProductB *product = (ProductB*)malloc(sizeof(ProductB));
product->base.show = showProductB;
printf("Input value for ProductB: ");
scanf("%d", &(product->value));
return (Product*)product;
}
int main() {
// 创建工厂实例
Factory factoryA = {createProductA};
Factory factoryB = {createProductB};
// 生产产品A
Product *productA = factoryA.createProduct();
productA->show();
// 生产产品B
Product *productB = factoryB.createProduct();
productB->show();
// 释放资源
free(productA);
free(productB);
return 0;
}
```
在这个示例中,我们定义了两个具体产品A和B,它们都实现了产品接口中的show方法。然后定义了两个工厂类,分别用于生产产品A和B,它们都实现了工厂接口中的createProduct方法。最后在main函数中,我们创建了工厂实例并使用它们来生产具体产品,并且调用了它们的show方法展示产品信息。注意,在使用完产品后需要释放资源,以避免内存泄漏。