提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
工厂模式:常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。
.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;
}
四.运行结果
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201005164347309.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NzkyMTkyOA==,size_16,color_FFFFFF,t_70#pic_center)
总结
提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。