博客
关于我
2024年大数据最全C语言设计模式:实现简单工厂模式和工程创建_数据工厂c语言(1),2024年最新分布式架构演进+相关笔记参考
阅读量:798 次
发布时间:2023-04-17

本文共 2072 字,大约阅读时间需要 6 分钟。

工厂模式在软件设计中是一种常用的创建型模式,它通过引入一个统一的接口来创建对象,从而避免了直接暴露对象创建的逻辑。这种设计方式让工厂类负责对象的创建过程,客户端只需通过接口来获取所需对象,而无需关心对象的具体创建方式。

工厂模式的实现

在C语言中,工厂模式的实现可以通过将不同对象的创建逻辑封装到各自的文件中,并通过函数接口暴露给主程序。这种方法使得主程序只需调用工厂函数,通过工厂函数获取所需对象,而无需直接处理对象的创建细节。

以下是C语言中工厂模式的实现步骤:

1. 定义对象结构

首先,我们定义一个通用的对象结构struct Animal,它包含了对象的基本属性和方法。每个具体的动物(如狗、猫、人)都继承自struct Animal,并实现自己的特定方法。

struct Animal {    char name[128];    int age;    int sex;    void (*peat)();    void (*pbeat)();    struct Animal *next; // 用于链表结构};

2. 创建具体对象

接下来,我们在各自的文件中定义具体的动物对象,并实现它们的特定方法。

// dog.cstruct Animal dog = {    .name = "狗",    .peat = dogeat,    .pbeat = dogbeat};
// cat.cstruct Animal cat = {    .name = "猫",    .peat = cateat,    .pbeat = catbeat};
// person.cstruct Animal person = {    .name = "人",    .peat = personeat,    .pbeat = personbeat};

3. 工厂函数的实现

我们通过工厂函数将各个具体对象注册到一个链表中。工厂函数接收一个链表头指针,返回注册后的链表头指针。

// cat.cstruct Animal* putCatInLink(struct Animal *phead) {    if (phead == NULL) {        return &cat;    } else {        cat.next = phead;        phead = &cat;        return phead;    }}
// dog.cstruct Animal* putDogInLink(struct Animal *phead) {    if (phead == NULL) {        return &dog;    } else {        dog.next = phead;        phead = &dog;        return phead;    }}
// person.cstruct Animal* putPersonInLink(struct Animal *phead) {    if (phead == NULL) {        return &person;    } else {        person.next = phead;        phead = &person;        return phead;    }}

4. 主程序的使用

在主程序中,我们通过调用工厂函数,将所有具体对象注册到链表中,并逐个调用它们的方法。

// mainpro.c#include "animal.h"int main() {    struct Animal *phead = NULL;    phead = putCatInLink(phead);    phead = putDogInLink(phead);    phead = putPersonInLink(phead);        // 调用各个对象的方法    while (phead) {        phead->peat();        printf("%s %d岁的%s\n", phead->name, phead->age, phead->name);        phead = phead->next;    }        return 0;}

工厂模式的优点

  • 封装性:工厂模式将对象的创建逻辑封装在工厂函数中,客户端只需通过接口调用,不需要关心具体的实现细节。
  • 灵活性:通过新增工厂函数,可以轻松添加新的对象类型,而无需修改主程序的代码。
  • 非对称性:客户端和工厂类之间的接口一致,客户端可以通过相同的接口调用不同的工厂函数,实现对称性。
  • 总结

    工厂模式通过引入工厂函数,将对象的创建逻辑从客户端代码中隔离,使得系统更加灵活和可扩展。在C语言中,通过链表的方式实现工厂模式,可以有效地管理和扩展不同对象的创建逻辑。

    转载地址:http://hxgfk.baihongyu.com/

    你可能感兴趣的文章