用c++写一个工厂模式代码
时间: 2023-09-08 08:04:58 浏览: 51
### 回答1:
// 工厂模式代码
public interface Factory {
public Product createProduct();
}
public class ConcreteFactory implements Factory {
@Override
public Product createProduct() {
return new ConcreteProduct();
}
}
public abstract class Product {
public abstract void use();
}
public class ConcreteProduct extends Product {
@Override
public void use() {
System.out.println("使用具体产品");
}
}
### 回答2:
工厂模式是一种创建型设计模式,用于创建对象而不指定具体的类。在C语言中,可以使用函数指针来实现工厂模式。
首先,我们需要定义一个抽象的产品结构体,例如:
```c
typedef struct {
// 产品的属性
} Product;
```
然后,我们定义不同产品的结构体和创建该产品的函数,例如:
```c
typedef struct {
Product product;
// 定义具体产品A的属性
} ProductA;
Product* createProductA() {
ProductA* productA = (ProductA*)malloc(sizeof(ProductA));
// 初始化产品A的属性
return (Product*)productA;
}
typedef struct {
Product product;
// 定义具体产品B的属性
} ProductB;
Product* createProductB() {
ProductB* productB = (ProductA*)malloc(sizeof(ProductB));
// 初始化产品B的属性
return (Product*)productB;
}
```
接下来,我们需要定义一个工厂函数,根据传入的参数来创建不同的产品:
```c
typedef enum {
ProductTypeA,
ProductTypeB
} ProductType;
Product* createProduct(ProductType type) {
switch (type) {
case ProductTypeA:
return createProductA();
case ProductTypeB:
return createProductB();
default:
return NULL;
}
}
```
使用工厂模式创建产品的代码示例:
```c
Product* productA = createProduct(ProductTypeA);
Product* productB = createProduct(ProductTypeB);
```
通过工厂函数的调用,我们可以根据需要创建具体的产品,而无需关心产品的创建细节。这样使得产品的创建和使用相分离,提高了代码的灵活性和可维护性。
### 回答3:
工厂模式是一种常用的设计模式,它通过一个工厂类来创建对象,而不是直接在客户端代码中使用new关键字来实例化对象。以下是用C语言实现工厂模式的代码示例:
```c
// 定义一个产品接口
typedef struct {
void (*showInfo)(void);
} Product;
// 定义具体产品1
typedef struct {
Product product;
char name[20];
} ConcreteProduct1;
// 具体产品1的showInfo函数实现
void showInfo1(void) {
printf("This is ConcreteProduct1.\n");
}
// 定义具体产品2
typedef struct {
Product product;
char name[20];
} ConcreteProduct2;
// 具体产品2的showInfo函数实现
void showInfo2(void) {
printf("This is ConcreteProduct2.\n");
}
// 定义一个工厂类
typedef struct {
Product* (*createProduct)(void);
} Factory;
// 具体工厂1的createProduct函数实现
Product* createProduct1(void) {
ConcreteProduct1* product = (ConcreteProduct1*)malloc(sizeof(ConcreteProduct1));
strcpy(product->name, "ConcreteProduct1");
product->product.showInfo = showInfo1;
return (Product*)product;
}
// 具体工厂2的createProduct函数实现
Product* createProduct2(void) {
ConcreteProduct2* product = (ConcreteProduct2*)malloc(sizeof(ConcreteProduct2));
strcpy(product->name, "ConcreteProduct2");
product->product.showInfo = showInfo2;
return (Product*)product;
}
int main() {
Factory* factory1 = (Factory*)malloc(sizeof(Factory));
factory1->createProduct = createProduct1;
Product* product1 = factory1->createProduct();
product1->showInfo();
Factory* factory2 = (Factory*)malloc(sizeof(Factory));
factory2->createProduct = createProduct2;
Product* product2 = factory2->createProduct();
product2->showInfo();
free(factory1);
free(factory2);
free(product1);
free(product2);
return 0;
}
```
以上代码示例中,我们定义了一个产品接口Product,以及两个具体产品ConcreteProduct1和ConcreteProduct2,它们都继承自Product接口并实现了各自的showInfo函数。
然后我们定义了一个工厂类Factory,它包含一个用于创建产品的函数指针createProduct。具体工厂1的createProduct函数会创建具体产品1的实例,具体工厂2的createProduct函数会创建具体产品2的实例。
在主函数中,我们通过工厂类来创建不同的产品,并调用其showInfo函数来展示产品信息。最后,记得释放内存,释放工厂类和产品的实例。