一、什么是设计模式?
前任设计经验的总结,具有稳定性强、拓展性强、容易理解的一些列编程思想和经验。设计模式一共有23种,项目只运用到了工厂模式。
二、什么是类和对象?
类是一种用户自定义的引用数据类型(模板),对象就是类实例出的一个具象。
三、什么是工厂模式?
工厂模式(Factory Pattern)是最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
好处:
在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。
工厂模式的主要解决的问题是,将原来分布在各个地方的对象创建过程单独抽离出来,交给工厂类负责创建。其他地方想要使用对象直接找工厂(即调用工厂的方法)获取对象。
一个简单的工厂模式例子:
Animal.h
struct Animal
{
/* data */
char name[128];
int age;
void (*spake)();
void (*sleep)();
struct Animal *next;
};
struct Animal *putCatInLink(struct Animal* phead);
struct Animal *putDogInLink(struct Animal* phead);
dog.c
#include "Animal.h"
#include<stdio.h>
void dog_spake()
{
printf("dog is Spakeing!\n");
}
void dog_sleep()
{
printf("dog is sleeping!\n");
}
struct Animal dog=
{
.name="dog",
.spake=dog_spake,
.sleep=dog_sleep
};
struct Animal *putDogInLink(struct Animal* phead)
{
if(phead==NULL)
{
phead=&dog;
}else{
dog.next=phead;
phead=&dog;
}
return phead;
}
cat.c
#include "Animal.h"
#include<stdio.h>
void cat_spake()
{
printf("Cat is Spakeing!\n");
}
void cat_sleep()
{
printf("Cat is sleeping!\n");
}
struct Animal cat=
{
"cat",
.spake=cat_spake,
.sleep=cat_sleep
};
struct Animal *putCatInLink(struct Animal* phead)
{
if(phead==NULL)
{
phead=&cat;
}else{
cat.next=phead;
phead=&cat;
}
return phead;
}
mainPor.c
#include<stdio.h>
#include"Animal.h"
#include<string.h>
struct Animal *findName(char *buf,struct Animal *phead)
{
if(phead==NULL)
{
printf("This is Empty!\n");
return NULL;
}
while(phead!=NULL){
if(!strcmp(phead->name,buf))
{
return phead;
}
phead=phead->next;
}
}
int main()
{
struct Animal *phead=NULL;
struct Animal *ptemp=NULL;
phead= putCatInLink(phead);
phead= putDogInLink(phead);
char str[128];
while(1)
{
printf("Please Input Cat or Dog?\n");
scanf("%s",str);
ptemp=findName(str,phead);
if(ptemp!=NULL)
{
printf ("%s\n",ptemp->name);
ptemp->sleep();
ptemp->spake();
}else{
printf("NO This Gay!\n");
}
}
return 0;
}
首先在头文件里边定义通用的一个类,然后将不同的对象写如不同的文件里面,比如cat.c和dog.c。最后在main函数里面不用太多代码就能将两个类实现,如果想要再生成一个类,再创建一个文件就好了。从而可以使自己的代码稳定性和可扩展性更强。
实现的结果: