什么是工厂模式
工厂模式是最常用的设计模式之一,这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们创建对象不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。
工厂模式的实现
cat.c(文件名)
#include "animal.h"
void catEat()
{
printf("eat fish\n");
return;
}
void catBeat()
{
printf("zhua\n");
return;
}
struct Animal cat={
.name="Tom",
.pbeat=catBeat,
.peat=catEat
};
struct Animal *putcatLink(struct Animal *phead)
{
struct Animal *temp = phead;
if(temp == NULL) {
phead = &cat;
return phead;
} else {
cat.next = phead;
phead = &cat;
}
return phead;
}
dog.c(文件名)
#include "animal.h"
void dogEat()
{
printf("eat meat\n");
return;
}
void dogBeat()
{
printf("yao\n");
return;
}
struct Animal dog={
.name="quan",
.pbeat=dogBeat,
.peat=dogEat
};
struct Animal *putdogLink(struct Animal *phead)
{
struct Animal *temp = phead;
if(temp == NULL) {
phead = &dog;
return phead;
} else {
dog.next = phead;
phead = &dog;
}
return phead;
}
头文件animal.h
#include <stdio.h>
struct Animal{
char name[32];
int age;
int sex;
void (*peat)();
void (*pbeat)(); //dog cat 是类(Animal)的一种对象
struct Animal *next;
};
extern struct Animal *putdogLink(struct Animal *phead);
extern struct Animal *putcatLink(struct Animal *phead);
main函数入口
#include "animal.h"
#include <string.h>
struct Animal *findUtilByName(char *str,struct Animal *phead)
{
struct Animal *temp = phead;
while(temp!=NULL){
if(!strcmp(temp->name,str)){
return temp;
}else{
temp = temp->next;
}
}
return NULL;
}
int main(void)
{
char buf[128]={'\0'};
struct Animal *phead = NULL;
struct Animal *ptemp = NULL;
phead = putcatLink(phead);
phead = putdogLink(phead);
while(1){
printf("请输入你想要动物的名字(Tom or quan)\n");
scanf("%s",buf);
ptemp = findUtilByName(buf,phead);
if(ptemp!=NULL){
ptemp->pbeat();
ptemp->peat();
}else if(ptemp==NULL){
printf("空链表\n");
}
memset(buf,'\0',sizeof(buf));
}
return 0;
}
以上是简单工厂模式的示例,工厂模式使代码逻辑和思路更加清晰,便于修改和添加。