c++实现工厂模式代码
时间: 2023-10-18 14:16:32 浏览: 92
工厂模式是一种创建型设计模式,它提供了一种创建对象的最佳方式,而无需暴露创建逻辑。以下是 C 语言实现工厂模式的示例代码:
```
#include <stdio.h>
#include <stdlib.h>
// 定义抽象产品类
typedef struct Product {
int id;
char* name;
} Product;
// 定义具体产品类
typedef struct ConcreteProductA {
Product product; // 继承自抽象产品类
int price;
} ConcreteProductA;
typedef struct ConcreteProductB {
Product product; // 继承自抽象产品类
char* color;
} ConcreteProductB;
// 定义抽象工厂类
typedef struct Factory {
Product* (*createProduct)(int id, char* name); // 创建产品的方法
} Factory;
// 定义具体工厂类
typedef struct ConcreteFactoryA {
Factory factory; // 继承自抽象工厂类
int price;
} ConcreteFactoryA;
typedef struct ConcreteFactoryB {
Factory factory; // 继承自抽象工厂类
char* color;
} ConcreteFactoryB;
// 实现抽象工厂类的方法
Product* createProduct(int id, char* name) {
Product* product = (Product*)malloc(sizeof(Product));
product->id = id;
product->name = name;
return product;
}
// 实现具体工厂类的方法
Product* createProductA(int id, char* name) {
ConcreteProductA* product = (ConcreteProductA*)malloc(sizeof(ConcreteProductA));
product->product = *createProduct(id, name);
product->price = 100;
return (Product*)product;
}
Product* createProductB(int id, char* name) {
ConcreteProductB* product = (ConcreteProductB*)malloc(sizeof(ConcreteProductB));
product->product = *createProduct(id, name);
product->color = "red";
return (Product*)product;
}
// 主函数
int main() {
ConcreteFactoryA factoryA = { { createProductA }, 200 };
ConcreteFactoryB factoryB = { { createProductB }, "blue" };
Product* productA = factoryA.factory.createProduct(1, "productA");
printf("productA: id=%d name=%s price=%d\n", productA->id, productA->name, ((ConcreteProductA*)productA)->price);
Product* productB = factoryB.factory.createProduct(2, "productB");
printf("productB: id=%d name=%s color=%s\n", productB->id, productB->name, ((ConcreteProductB*)productB)->color);
free(productA);
free(productB);
return 0;
}
```
在上面的代码中,我们首先定义了抽象产品类 `Product` 和具体产品类 `ConcreteProductA` 和 `ConcreteProductB`。然后定义了抽象工厂类 `Factory` 和具体工厂类 `ConcreteFactoryA` 和 `ConcreteFactoryB`,并实现了抽象工厂类的方法 `createProduct`,以及具体工厂类的方法 `createProductA` 和 `createProductB`。最后在主函数中使用具体工厂类创建产品,并输出产品信息。
阅读全文