目录
一、举例说明:把下面的代码转换成工厂模式的方式来实现
二、用工厂模式的方式来实现
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、用工厂模式创建的文件浏览




















