设计模式之工厂模式

什么是工厂模式

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

工厂模式的实现

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值