智能家居项目(二)之工厂模式的实现
文章目录
- 一、实例:把下面的代码转换成工厂模式设计
- 二、用工厂模式的方式来实现
一、实例:把下面的代码转换成工厂模式设计
#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;
}
执行结果: