说明:
均由 chatgpt生成,实例可以看出无法运行,仅供参考~
UML图:
‘+' 表示public, '-' 表示private,“#' 表示protected.”
一文掌握14种UML图-腾讯云开发者社区-腾讯云 (tencent.com)
五分钟带你读懂UML类图 - 知乎 (zhihu.com)
简单工厂模式:
代码实现:
#include <stdio.h>// 定义产品接口
typedef struct {void (*operation)();
} Product;// 具体产品A
typedef struct {Product product;
} ConcreteProductA;void ConcreteProductA_operation() {printf("具体产品 A 的操作\n");
}// 具体产品B
typedef struct {Product product;
} ConcreteProductB;void ConcreteProductB_operation() {printf("具体产品 B 的操作\n");
}// 工厂类
typedef struct {Product* (*createProduct)(char);
} Factory;Product* Factory_createProduct(char type) {switch (type) {case 'A':return (Product*)malloc(sizeof(ConcreteProductA));case 'B':return (Product*)malloc(sizeof(ConcreteProductB));default:return NULL;}
}int main() {Factory factory;factory.createProduct = Factory_createProduct;// 创建产品AProduct* productA = factory.createProduct('A');productA->operation(productA);// 创建产品BProduct* productB = factory.createProduct('B');productB->operation(productB);free(productA);free(productB);return 0;
}
在上述示例中,我们定义了一个产品接口 Product
,并以具体产品A和具体产品B实现该接口。然后,我们定义了一个工厂类 Factory
,它包含一个用于创建产品的函数 createProduct
。
在 createProduct
函数中,我们根据输入的类型参数来创建不同的产品对象。如果类型是 'A',则分配内存给 ConcreteProductA
对象;如果类型是 'B',则分配内存给 ConcreteProductB
对象。最后,我们在 main
函数中使用工厂类来创建产品并调用其操作函数。
简单工厂模式(Simple Factory Pattern)是一种创建型设计模式,它提供了一个统一的工厂类,通过传入不同的参数来创建不同的产品对象。简单工厂模式将对象的创建逻辑封装在工厂类中,客户端只需通过工厂类来获取所需的产品对象,而无需关心具体的创建过程。
优点:
- 简化对象的创建:简单工厂模式可以将对象的创建逻辑集中到一个工厂类中,使得客户端无需关心具体的创建细节,只需通过工厂类获取所需的产品对象。
- 解耦客户端和具体产品类:客户端只依赖工厂类接口,而不依赖具体的产品类。这样在需要更换或新增产品时,只需修改工厂类,而无需修改客户端代码。
- 隐藏具体实现细节:工厂类可以对客户端隐藏具体产品的实现细节,只暴露工厂方法接口给客户端使用。
缺点:
- 不符合开闭原则:当需要新增产品时,需要修改工厂类的代码,违反了开闭原则。这意味着对于每个新增的产品,都需要修改工厂类,可能导致工厂类变得庞大而复杂。
- 产品创建逻辑集中在一个类中:简单工厂模式将对象的创建逻辑集中在一个工厂类中,当产品较多时,工厂类可能会变得复杂,不易于维护和扩展。
适用场景:
简单工厂模式适用于以下情况:
- 对象的创建逻辑相对简单,并且不需要频繁变动。
- 客户端只需要通过一个统一的接口来获取产品对象,而无需关心具体的创建过程。
- 当需要隐藏产品的实现细节,只暴露工厂方法给客户端使用时。
需要注意的是,简单工厂模式并不是一个严格的设计模式,它更像是一种编程习惯或者一种简化对象创建的方法。在具体项目中,根据实际需求和复杂度,可以选择使用其他更灵活和可扩展的创建型设计模式,如工厂方法模式或抽象工厂模式。