当前位置: 首页 > news >正文

最简便的工厂模式

工厂模式

什么是对象 什么是类

c 其实也是面向过程的 或者面向对象的编程 

在这里插入图片描述

1 一个调用者想创建一个对象,只要知道其名称就可以了。 
2、扩展性高,如果想增加一个产品,只要扩展一个工厂类就可以。
3、屏蔽产品的具体实现,调用者只关心产品的接口。 
也就是 我们只需要知道名字 其他的不用关心 不用去关心封装过程 和内容
调用名字可以了 

在这里插入图片描述

链表的头插法

用 链表的头插法 把各种的名 加入链表中来 

在这里插入图片描述
思路

现在 最右的 还没加入 
第二个为头结点 所以第一个的下一个地址是头结点 

在这里插入图片描述

多个也是这样 分别头插法就行了

输入名字 找封装函数

anminal.h

#include <stdio.h>
#include <string.h>

struct aminal{

   char name[32];
   void (*eat)();
   void (*beat)();

   struct aminal *next;
   

};

struct aminal*catLinkNodes(struct aminal *head);
struct aminal*dogLinkNodes(struct aminal *head);

cat.c

#include "anminal.h"


void catEat()
{
  printf("cat eat fish\n");
}
void catBeat()
{
  printf("cat beat rice\n");
}

struct aminal cat = {

   .name = "cat",
   .eat  = catEat,
   .beat = catBeat

};

 struct aminal *catLinkNodes(struct aminal *head)
{
  struct aminal *tmp = head;

   if(head == NULL){

      head=&cat;
	  return head;

   }else{
   	   
        cat.next = head;
		head =&cat;
		return head;
   }


}

dog.c

#include "anminal.h"


void dogEat()
{
  printf("dog eat shi\n");
}
void dogBeat()
{
  printf("dog beat xiaodidi\n");
}


struct aminal dog = {

   .name = "dog",
   .eat  = dogEat,
   .beat = dogBeat

};

 struct aminal *dogLinkNodes(struct aminal *head)
{
  struct aminal *tmp = head;

   if(head == NULL){

      head=&dog;
	  return head;

   }else{
   	   
        dog.next = head;
		head =&dog;
		return head;
   }


}


mian.c

注意:  头结点不存在数据 所以把头结点的地址赋值另一个变量 间接把头结点的值 打印出来 
#include "anminal.h"

struct aminal* LookforAminaByname(struct aminal *head,char name[])
{
	struct aminal *tmp=head;

   if(head == NULL){
       return NULL; 
   }else{
	   while (tmp!=NULL)
		   {
		     if(!strcmp(tmp->name,name)){
                   return tmp;
			 }
			  tmp =tmp->next;
		   }
            return NULL;
   }


}

void main()
{
     struct aminal *Aminalphead=NULL;
	 struct aminal *tmp=NULL;
      char name[32]={'\0'};
	  
	Aminalphead = catLinkNodes(Aminalphead);  
	Aminalphead = dogLinkNodes(Aminalphead);  //头插法进链表
	
   while(1){
   	
    printf("input :cat-----dog--------\n");
	
    scanf("%s",name);
   
	getchar();
   
   tmp=LookforAminaByname(Aminalphead,name);//通过strcmp 把 输入的名字 和 封装的名字 比较 得出数据  

     /*头不为空 就 调用函数 实现 */
     if(tmp!=NULL){

	 tmp->beat();
	 tmp->eat();
        
	 }
   }
    
   
 
}

1 把文件夹拉虚拟机  
2 gcc *.c  编译 当前页面下的所有的c文件 

在这里插入图片描述

在这里插入图片描述

相关文章:

  • 【实战项目】高并发内存池(模拟实现mini_tcmalloc)
  • 173.CI/CD(一):gitlab配置,jenkins的安装配置,jenkins实现基础的CI/CD,Sonarqube代码质量检测,Harbor镜像仓库
  • FastAPI 学习之路(二十七)安全校验
  • office32位和64位有什么区别
  • 猿创征文|python求解四位数 青少年编程电子学会python编程等级考试三级真题解析2021年03月
  • 当事人胜诉后,所预交受理费是否应予退还
  • uniapp的拨打电话,下拉和上划
  • 如何确定 RMAN 的多路复用级别
  • Java excel poi 读取已有文件 ,动态插入一列数据
  • Java项目:SSM企业工资管理系统
  • Python基于Django的汽车销售网站
  • 花好月圆时,邀你一起来读诗!
  • 在Slicer中添加点、直线和曲线
  • Win7下安装Docker(虚拟机win7)
  • JavaWeb对于JSP内置对象及其作用域的深入理解与运用
  • Angular js 常用指令ng-if、ng-class、ng-option、ng-value、ng-click是如何使用的?
  • docker python 配置
  • Druid 在有赞的实践
  • FastReport在线报表设计器工作原理
  • HTML中设置input等文本框为不可操作
  • If…else
  • interface和setter,getter
  • Intervention/image 图片处理扩展包的安装和使用
  • JavaScript DOM 10 - 滚动
  • mysql常用命令汇总
  • SpringCloud(第 039 篇)链接Mysql数据库,通过JpaRepository编写数据库访问
  • 从tcpdump抓包看TCP/IP协议
  • 关于字符编码你应该知道的事情
  • 人脸识别最新开发经验demo
  • 学习ES6 变量的解构赋值
  • 一起来学SpringBoot | 第三篇:SpringBoot日志配置
  • elasticsearch-head插件安装
  • 继 XDL 之后,阿里妈妈开源大规模分布式图表征学习框架 Euler ...
  • 曾刷新两项世界纪录,腾讯优图人脸检测算法 DSFD 正式开源 ...
  • #QT(智能家居界面-界面切换)
  • (02)vite环境变量配置
  • (1)虚拟机的安装与使用,linux系统安装
  • (52)只出现一次的数字III
  • (6)添加vue-cookie
  • (react踩过的坑)Antd Select(设置了labelInValue)在FormItem中initialValue的问题
  • (板子)A* astar算法,AcWing第k短路+八数码 带注释
  • .mysql secret在哪_MYSQL基本操作(上)
  • .NET delegate 委托 、 Event 事件,接口回调
  • .net web项目 调用webService
  • .NET 中让 Task 支持带超时的异步等待
  • .NET/C# 如何获取当前进程的 CPU 和内存占用?如何获取全局 CPU 和内存占用?
  • /bin/rm: 参数列表过长"的解决办法
  • /etc/skel 目录作用
  • @SuppressWarnings(unchecked)代码的作用
  • [Android] Upload package to device fails #2720
  • [BT]BUUCTF刷题第9天(3.27)
  • [C#]winform制作仪表盘好用的表盘控件和使用方法
  • [C语言][PTA基础C基础题目集] strtok 函数的理解与应用
  • [datastore@cyberfear.com].Elbie、[thekeyishere@cock.li].Elbie勒索病毒数据怎么处理|数据解密恢复
  • [EMWIN]FRAMEWIN 与 WINDOW 的使用注意