02-工厂模式-C语言实现

工厂模式:Define an interface for creating an object,but let subclasses decide which class to instantiate.Factory Method lets a class defer instantiation to subclasses.(定义一个用于创建对象的接口, 让子类决定实例化哪一个类。 工厂方法使一个类的实例化延迟到其子类。 )

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;

    // 创建产品A
    Product* productA = factory.createProduct('A');
    productA->operation(productA);

    // 创建产品B
    Product* 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)是一种创建型设计模式,它提供了一个统一的工厂类,通过传入不同的参数来创建不同的产品对象。简单工厂模式将对象的创建逻辑封装在工厂类中,客户端只需通过工厂类来获取所需的产品对象,而无需关心具体的创建过程。

优点:

  1. 简化对象的创建:简单工厂模式可以将对象的创建逻辑集中到一个工厂类中,使得客户端无需关心具体的创建细节,只需通过工厂类获取所需的产品对象。
  2. 解耦客户端和具体产品类:客户端只依赖工厂类接口,而不依赖具体的产品类。这样在需要更换或新增产品时,只需修改工厂类,而无需修改客户端代码。
  3. 隐藏具体实现细节:工厂类可以对客户端隐藏具体产品的实现细节,只暴露工厂方法接口给客户端使用。

缺点:

  1. 不符合开闭原则:当需要新增产品时,需要修改工厂类的代码,违反了开闭原则。这意味着对于每个新增的产品,都需要修改工厂类,可能导致工厂类变得庞大而复杂。
  2. 产品创建逻辑集中在一个类中:简单工厂模式将对象的创建逻辑集中在一个工厂类中,当产品较多时,工厂类可能会变得复杂,不易于维护和扩展。

适用场景:

简单工厂模式适用于以下情况:

  1. 对象的创建逻辑相对简单,并且不需要频繁变动。
  2. 客户端只需要通过一个统一的接口来获取产品对象,而无需关心具体的创建过程。
  3. 当需要隐藏产品的实现细节,只暴露工厂方法给客户端使用时。

需要注意的是,简单工厂模式并不是一个严格的设计模式,它更像是一种编程习惯或者一种简化对象创建的方法。在具体项目中,根据实际需求和复杂度,可以选择使用其他更灵活和可扩展的创建型设计模式,如工厂方法模式或抽象工厂模式。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值