工厂设计模式的C++代码
时间: 2024-05-13 16:14:46 浏览: 106
以下是工厂设计模式的 C 代码示例:
```c
#include <stdio.h>
// 定义产品接口
typedef struct {
void (*print)(void);
} Product;
// 实现产品1
typedef struct {
Product product;
} Product1;
void Product1_print(void) {
printf("Product1\n");
}
Product1* create_Product1(void) {
Product1* p = (Product1*)malloc(sizeof(Product1));
p->product.print = Product1_print;
return p;
}
// 实现产品2
typedef struct {
Product product;
} Product2;
void Product2_print(void) {
printf("Product2\n");
}
Product2* create_Product2(void) {
Product2* p = (Product2*)malloc(sizeof(Product2));
p->product.print = Product2_print;
return p;
}
// 工厂类
typedef struct {
Product* (*create_product)(void);
} Factory;
// 实现工厂类
typedef struct {
Factory factory;
} Product1Factory;
Product* Product1Factory_create_product(void) {
return (Product*)create_Product1();
}
Product1Factory* create_Product1Factory(void) {
Product1Factory* f = (Product1Factory*)malloc(sizeof(Product1Factory));
f->factory.create_product = Product1Factory_create_product;
return f;
}
typedef struct {
Factory factory;
} Product2Factory;
Product* Product2Factory_create_product(void) {
return (Product*)create_Product2();
}
Product2Factory* create_Product2Factory(void) {
Product2Factory* f = (Product2Factory*)malloc(sizeof(Product2Factory));
f->factory.create_product = Product2Factory_create_product;
return f;
}
int main() {
Factory* f1 = (Factory*)create_Product1Factory();
Product* p1 = f1->create_product();
p1->print();
free(p1);
free(f1);
Factory* f2 = (Factory*)create_Product2Factory();
Product* p2 = f2->create_product();
p2->print();
free(p2);
free(f2);
return 0;
}
```
在上面的代码中,我们首先定义了一个产品接口 `Product`,同时实现了两个具体的产品 `Product1` 和 `Product2`,它们都实现了 `Product` 接口中的 `print` 方法。
然后我们定义了一个工厂接口 `Factory`,并实现了两个具体的工厂 `Product1Factory` 和 `Product2Factory`,它们都实现了 `Factory` 接口中的 `create_product` 方法。
在主函数中,我们先创建了一个 `Product1Factory` 对象,它的 `create_product` 方法可以创建出一个 `Product1` 对象,然后调用 `print` 方法输出了 `Product1`。
接着我们又创建了一个 `Product2Factory` 对象,它的 `create_product` 方法可以创建出一个 `Product2` 对象,然后调用 `print` 方法输出了 `Product2`。
这就是工厂设计模式的一个简单示例。