目录
一、举例说明:把下面的代码转换成工厂模式的方式来实现
二、用工厂模式的方式来实现
1、创建三个函数的文件
2、创建一个 Animal.h文件,把上述三个函数名都放在这个文件中
3、创建一个main主函数文件
4、用工厂模式创建的文件浏览
一、举例说明:把下面的代码转换成工厂模式的方式来实现
#include <stdio.h>
struct Animal{
char name[32];
int eat;
int age;
int sex;
void (*peat)();
};
void dogEat(){
printf("dog chi shi\n");
}
void catEat(){
printf("cat chi yu\n");
}
void personEat(){
printf("person chi mi\n");
}
int main(){
struct Animal dog = {
.name = "a huang",
.peat = dogEat
};
struct Animal cat = {
.name = "a mao",
.peat = catEat
};
struct Animal person = {
.name = "a ren",
.peat = personEat
};
dog.peat();
cat.peat();
person.peat();
printf("%s\n",dog.name);
return 0;
}
二、用工厂模式的方式来实现
代码分析:由上图中的代码分析得出,有一个结构体、三个函数、一个main主函数
想到的思路:
(1)单独创建一个mainPro.c主函数文件
(2)三个函数分别创建三个文件:Cat.c、Dog.c、Person.c
(3)在创建一个 Animal.h文件,把三个函数的名都放在这个文件中
(4)然后在mainPro.c主函数中,去调用这个Animal.h文件
1、创建三个函数的文件
(1)创建Cat.c文件
#include "animal.h"
void catEat(){
printf("cat chi yu\n");
}
struct Animal cat = {
.name = "Tom",
.peat = catEat
};
struct Animal* putCatlnLink(struct Animal *phead){
if(phead ==NULL){
phead = &cat;
return phead;
}
else {
cat.next = phead;
phead = &cat;
return phead;
}
}
(2)创建Dog.c文件
#include "animal.h"
void dogEat(){
printf("dog chi shi\n");
}
struct Animal dog = {
.name = "huang",
.peat = dogEat
};
struct Animal* putDoglnLink(struct Animal *phead){
if(phead ==NULL){
phead = &dog;
return phead;
}
else {
dog.next = phead;
phead = &dog;
return phead;
}
}
(3)创建Person.c文件
#include "animal.h"
void personEat(){
printf("person chi mi\n");
}
struct Animal person = {
.name = "ren",
.peat = personEat
};
struct Animal* putPersonlnLink(struct Animal *phead){
if(phead ==NULL){
phead = &person;
return phead;
}
else {
person.next = phead;
phead = &person;
return phead;
}
}
2、创建一个 Animal.h文件,把上述三个函数名都放在这个文件中
#include <stdio.h>
struct Animal{
char name[32];
int eat;
int age;
int sex;
void (*peat)();
struct Animal *next;
};
struct Animal* putDoglnLink(struct Animal *phead);
struct Animal* putCatlnLink(struct Animal *phead);
struct Animal* putPersonlnLink(struct Animal *phead);
3、创建一个mainPro.c主函数文件
#include <stdio.h>
#include "animal.h"
#include <string.h>
struct Animal* findUrilByName(char *str,struct Animal *phead){ //链表
struct Animal *tmp = phead;
if(tmp == NULL){
return NULL;
}else{
while(tmp != NULL){
if(strcmp(tmp->name,str) == 0){
return tmp;
}
tmp = tmp->next;
}
return NULL;
}
}
int main(){
char buf[128] = {'\0'};
struct Animal *phead = NULL;
struct Animal* ptmp;
phead = putCatlnLink(phead);
phead = putDoglnLink(phead);
phead = putPersonlnLink(phead);
while(1){ //业务代码
printf("Input: Tom,huang,ren\n");
scanf("%s",buf);
ptmp = findUrilByName(buf,phead);
if(ptmp != NULL){
ptmp->peat();
}
memset(buf,'\0',sizeof(buf));
}
return 0;
}
最后的执行结果:
4、用工厂模式创建的文件浏览