设计模式中的工厂模式,有哪些分类,请详细说明,并且使用c++ 语言分别写出对应的代码
时间: 2023-06-04 11:07:33 浏览: 67
好的,我可以回答这个问题。以下是设计模式中工厂模式的分类:
1. 简单工厂模式
简单工厂模式又叫静态工厂模式,是指根据传递进来的参数,动态决定创建哪种类的对象。该模式只有一个工厂方法,负责根据传入的参数来创建具体的产品。在该模式中,工厂类负责创建所有的对象,但这样也带来了类的膨胀和耦合的问题。
以下是使用 c 语言写的简单工厂模式:
```c
//产品接口
typedef struct Product {
void (*operation)(struct Product *);
} Product;
//具体产品1
typedef struct ConcreteProduct1 {
void (*operation)(Product *);
} ConcreteProduct1;
//具体产品2
typedef struct ConcreteProduct2 {
void (*operation)(Product *);
} ConcreteProduct2
//工厂类
Product *factory(int type) {
switch(type) {
case 1:
return (Product *)ConcreteProduct1_new();
case 2:
return (Product *)ConcreteProduct2_new();
default:
return NULL;
}
}
//具体产品1实现接口
void ConcreteProduct1_operation(Product *product) {
//具体实现
}
//具体产品2实现接口
void ConcreteProduct2_operation(Product *product) {
//具体实现
}
```
2. 工厂方法模式
工厂方法模式是指每个具体产品对应一个工厂,由这个工厂负责创建该产品的对象实例。这样每个产品类和产品类的创建者都可以被单独的修改而互不影响。工厂方法模式由抽象工厂类、具体工厂类、抽象产品类和具体产品类组成。
以下是使用 c 语言写的工厂方法模式:
```c
//产品接口
typedef struct IProduct {
void (*operation)(struct IProduct *);
} IProduct;
//具体产品1
typedef struct ConcreteProduct1 {
void (*operation)(IProduct *);
} ConcreteProduct1;
//具体产品2
typedef struct ConcreteProduct2 {
void (*operation)(IProduct *);
} ConcreteProduct2;
//抽象工厂类
typedef struct IFactory {
IProduct *(*create_product)(int);
} IFactory;
//具体工厂1
typedef struct ConcreteFactory1 {
IProduct *(*create_product)(int);
} ConcreteFactory1;
//具体工厂2
typedef struct ConcreteFactory2 {
IProduct *(*create_product)(int);
} ConcreteFactory2;
//具体工厂1实现接口
IProduct *ConcreteFactory1_create_product(int type) {
switch(type) {
case 1:
return (IProduct *)ConcreteProduct1_new();
case 2:
return (IProduct *)ConcreteProduct2_new();
default:
return NULL;
}
}
//具体工厂2实现接口
IProduct *ConcreteFactory2_create_product(int type) {
switch(type) {
case 1:
return (IProduct *)ConcreteProduct1_new();
case 2:
return (IProduct *)ConcreteProduct2_new();
default:
return NULL;
}
}
//具体产品1实现接口
void ConcreteProduct1_operation(IProduct *product) {
//具体实现
}
//具体产品2实现接口
void ConcreteProduct2_operation(IProduct *product) {
//具体实现
}
```
以上是对工厂模式分类的详细说明并使用 c 语言分别写出了对应的代码,希望能够对你有所帮助。