设计模式之工厂模式

什么是工厂模式

工厂模式是最常用的设计模式之一,这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们创建对象不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。

工厂模式的实现

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;
}

以上是简单工厂模式的示例,工厂模式使代码逻辑和思路更加清晰,便于修改和添加。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值