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