博客
关于我
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/

    你可能感兴趣的文章
    Mysql学习总结(67)——MYSQL慢查询日志
    查看>>
    Mysql学习总结(68)——MYSQL统计每天、每周、每月、每年数据 SQL 总结
    查看>>
    Mysql学习总结(69)——Mysql EXPLAIN 命令使用总结
    查看>>
    Mysql学习总结(6)——MySql之ALTER命令用法详细解读
    查看>>
    Mysql学习总结(70)——MySQL 优化实施方案
    查看>>
    Mysql学习总结(71)——MySQL 重复记录查询与删除总结
    查看>>
    Mysql学习总结(71)——数据库介绍(MySQL安装 体系结构、基本管理)再回顾
    查看>>
    Mysql学习总结(73)——MySQL 查询A表存在B表不存在的数据SQL总结
    查看>>
    Mysql学习总结(76)——MySQL执行计划(explain)结果含义总结
    查看>>
    Mysql学习总结(77)——温故Mysql数据库开发核心原则与规范
    查看>>
    Mysql学习总结(78)——MySQL各版本差异整理
    查看>>
    Mysql学习总结(79)——MySQL常用函数总结
    查看>>
    Mysql学习总结(7)——MySql索引原理与使用大全
    查看>>
    Mysql学习总结(80)——统计数据库的总记录数和库中各个表的数据量
    查看>>
    Mysql学习总结(81)——为什么MySQL不推荐使用uuid或者雪花id作为主键?
    查看>>
    Mysql学习总结(82)——MySQL逻辑删除与数据库唯一性约束如何解决?
    查看>>
    Mysql学习总结(83)——常用的几种分布式锁:ZK分布式锁、Redis分布式锁、数据库分布式锁、基于JDK的分布式锁方案对比总结
    查看>>
    Mysql学习总结(84)—— Mysql的主从复制延迟问题总结
    查看>>
    Mysql学习总结(85)——开发人员最应该明白的数据库设计原则
    查看>>
    Mysql学习总结(8)——MySql基本查询、连接查询、子查询、正则表达查询讲解
    查看>>