简单工厂模式

2023-11-17

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

工厂模式:常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。

.h -> ①创建一个共用类(结构体)②声明函数
.c ->对类具体化(对象)

围绕着结构体来编程,将变量,函数都存放于结构体当中,然后通过链表将多个结构体(.c文件)连接起来,即构成一个项目。

一、创建头文件

animal.h

#include <stdio.h>

struct Animal {
    char name[128];
    int age;
    int sex;

    void (*peat)();
    void (*pbeat)();

    struct Animal *next;       //链表节点
};

struct Animal *putCatInLink(struct Animal *phead);
struct Animal *putDogInLink(struct Animal *phead);

二、创建.c文件

1 cat.c

#include "animal.h"

void catEat()
{
    printf("猫吃鱼\n");
}

void catBeat()
{
    printf("抓你小弟弟\n");
}

struct Animal cat = {
        .name = "TOM",
        .peat = catEat,
        .pbeat = catBeat
};

struct Animal *putCatInLink(struct Animal *phead)
{
    if(phead == NULL){
        phead = &cat;
        return phead;
    }else{  
        phead->next = &cat;	//尾插法
        cat.next = NULL;
        //cat.next = phead; //头插法
        //phead = &cat;
        return phead;
    }
}

2.dog.c

#include "animal.h"

void dogEat()
{
    printf("狗吃屎\n");
}

void dogBeat()
{

    printf("咬你小弟弟\n");
}

 struct Animal dog = {
        .name = "taidi",
        .peat = dogEat,
        .pbeat = dogBeat
};

struct Animal *putDogInLink(struct Animal *phead)
{
    if(phead == NULL){
        phead = &dog;
        return phead;
    }else{  
        phead->next = &dog; //尾插法
        dog.next = NULL;

        //dog.next = phead; //头插法
        //phead = &dog;
        return phead;
    }
}

3 person.c

#include "animal.h" 

void personEat()
{
    printf("人吃米\n");
}

void personBeat()
{
    printf("猴子偷桃\n");
}

struct Animal person = {
        .name = "qiuyiguang",
        .pbeat = personBeat,
        .peat = personEat
};

/* 定义一个结构体函数,返回指针节点*/
struct Animal *putPersonInLink(struct Animal *phead)   
{
    /* 头插法*/
    if(phead == NULL){  //person作为头节点
        phead = &person;

        return phead;
    }else{
		phead->next = &person;	//尾插法
		person.next = NULL;
		
        //person.next = phead;	//头插法
        //phead = &person;
        return phead;
    }

}


三.创建main.c

#include "animal.h"
#include <string.h>


struct Animal *getName(char *str,struct Animal *phead)
{
    struct Animal *tmp = phead;
    /* 遍历链表*/
    if(phead == NULL){
        printf("空\n");
        return NULL;
    }else{
        while(tmp != NULL){
            if(strcmp(str,tmp->name) == 0){
                return tmp;
            }
            tmp = tmp->next;
        }
    }

}

int main()
{
    char buf[128] = {'\0'};
    struct Animal *phead = NULL; //链表头节点
    struct Animal *ptmp;

    /* 将3个文件用链表进行连接起来*/
    phead = putCatInLink(phead);
    phead = putDogInLink(phead);
    phead = putPersonInLink(phead);

    while(1){

        printf("请输入TOM,taidi,qiuyiguang:\n");
        scanf("%s",buf);
        ptmp = getName(buf,phead);

        if(ptmp != NULL){
            ptmp->peat();
            ptmp->pbeat();
        }
        memset(buf, '\0', sizeof(buf));

    }

    return 0;
}

四.运行结果

在这里插入图片描述

总结

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

简单工厂模式 的相关文章

随机推荐

  • Kylin--简介及图解架构

    Kylin简介 Kylin 麒麟 的诞生背景 Kylin的应用场景 为什么要使用Kylin Kylin的总体架构 Kylin 麒麟 的诞生背景 ebay 中国团队研发的 是第一个真正由中国人自己主导 从零开始 自主研发 并成为Apache顶
  • Linux中创建文件与文件夹

    一 创建文件夹 命令 mkdir 文件夹名 例 一开始home目录下没有test文件夹 命令创建后生成 二 创建文件 命令 touch 文件名 例 一开始test文件夹下没有boot properties 命令创建后生成 三 注意事项 创建
  • linux下挂载移动硬盘(ntfs格式),Linux下挂载移动硬盘(NTFS格式)

    工作中遇到linux系统 Red Hat Enterprise5 7 挂载希捷ntfs格式移动硬盘 会跳出一个ERROR提示框 The volume EAGET NQH user the ntfs file system which is
  • arcpy导入报错 “ImportRrror: No module named arcpy”

    在使用ArcGIS自带的Python IDLE处理数据的时候 导入arcpy报错 ImportError No module named arcpy 我遍历了各解决方法依然无法成功导入arcpy 后经过查询 探索 通过如下方法得以成功解决
  • aoj1303

    继续python系列 python能够自动推断类型这个太好用了 根本不用声明类型 自己根据运行情况推断出所用的类型 所以在定义函数的时候根本不用声明参数的类型 下面这个题目aoj1303 求2的指数 如下 def gethex a li w
  • 关于飞书的告警通知,这里有个更好的办法

    飞书 是字节跳动于2016年自研的新一代一站式协作平台 是保障字节跳动全球五万人高效协作的办公工具 飞书将即时沟通 日历 云文档 云盘和工作台深度整合 通过开放兼容的平台 让成员在一处即可实现高效的沟通和流畅的协作 全方位提升企业效率 20
  • Git 使用

    Git 一 Git基础 1 Git介绍 Git是目前世界上最先进的分布式版本控制系统 2 Git与Github 2 1 两者区别 Git是一个分布式版本控制系统 简单的说其就是一个软件 用于记录一个或若干文件内容变化 以便将来查阅特定版本修
  • 模板类、模板函数的模板类型显式实例化及其用途(转载)

    转载自 C 11模板隐式实例化 显式实例化声明 定义 简单易懂 云飞扬 Dylan的博客 CSDN博客 模板隐式实例化 1 隐式实例化 在代码中实际使用模板类构造对象或者调用模板函数时 编译器会根据调用者传给模板的实参进行模板类型推导然后对
  • 【LAMMPS系列】LAMMPS软件安装资料包

    大家好 我是粥粥 LAMMPS 是一种经典的分子动力学代码 专注于材料建模 它是大型原子 分子大规模并行模拟器的首字母缩略词 LAMMPS 具有固态材料 金属 半导体 和软物质 生物分子 聚合物 以及粗粒或中等系统的势函数 它可用于模拟原子
  • 自定义多数据源JDBC连接池

    背景 公司需要对各个客户的数据库进行统一管理 故涉及到对多个不同数据库进行连接 传统的数据库连接池无法满足需求 故结合网上的自定义数据库连接池 进行的改进 代码如下 注意 由于代码处于公司环境 有直接使用肯定是会有报错 相信这种简单的修补是
  • android Stopwatch实例

    Stopwatch 实例 package net baisoft stopwatch import java util ArrayList import java util Date import java util HashMap imp
  • electron vue 打开新窗口

    1 主进程 background js文件 const winURL process env NODE ENV development http localhost 8080 file dirname index html 事件名 open
  • 网页设计期末大作业-景点旅游网站(含导航栏,轮播图,样式精美)

    景点旅游网站 资源链接在文末 页设计期末结课的作业 样式很精美 链接基本正常 详细情况入下图所示 资源下载链接 https download csdn net download weixin 43474701 85514120
  • AIX显示版本的最高全包含版本原则

    复杂度2 5 机密度4 5 最后更新2021 05 02 专题其它章节说过AIX对所有程序包管理会检验完整性 并且内置了一个验证列表 包含其所能识别的最新版应当包含的各个程序包的版本 如果当前安装的TL Patch不完整 则只会显示可以实现
  • CSS transform属性的简单应用——双开门动画效果

    1 效果演示 CSS transform属性有许多效果 平移 旋转 缩放等 这里简单应用平移效果 实现双开门动画 以下为效果图 2 设计思路 设置一张居中的需要隐藏的底图 设置封面图 平分成左右两部分 鼠标悬浮在封面图上 触发 开门 效果
  • 在C/C++代码中使用SSE等指令集的指令(4)SSE指令集Intrinsic函数使用

    在http blog csdn net gengshenghong article details 7008682里面列举了一些手册 其中Intel Intrinsic Guide可以查询到所有的Intrinsic函数 对应的汇编指令以及如
  • centos7的安装和创建用户

    1 centos7 2的安装 打开安装包之后解压 然后双击 进入下面的界面 选择语言 点击下一步 2 然后来到了配置页面 可以配置时间 选择中国的时区 3 其他的选择默认就好 重要的是选择安装类型和磁盘分区 4 选择安装类型 一般默认是mi
  • npm开发微信小程序--使用vantui 详解干货

    更新微信开发者工具创建项目 1 创建项目 放在一个合适的文件夹中 没有APPID时 请点击测试号 或去注册一个 2 进入项目的根目录 npm init 一路回车 要先npm init 初始化项目 否则会报错 官方文档中没有提到的东东 里面有
  • 爬虫实战——58同城租房数据爬取

    背景 自己本人在暑期时自学了python 还在中国大学mooc上学习了一些爬虫相关的知识 对requests库 re库以及BeautifulSoup库有了一定的了解 但是没有过爬虫方面的实战 刚好家人有这方面需求 就对58同城上的租房数据进
  • 简单工厂模式

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前言 一 创建头文件 二 创建 c文件 1 cat c 2 dog c 3 person c 三 创建main c 四 运行结果 总结 前言 工厂模式 常用的设计模