智能家居 (2) ——设计模式的引入

目录

  • 设计模式的概念引入
  • 工厂模式的实现
    • animal.h
    • mainPro.c
    • cat.c
    • dog.c
    • person.c
  • 工厂模式的功能验证
  • 往期文章

设计模式的概念引入

在这里插入图片描述

工厂模式的实现

在这里插入图片描述

所有代码最好在Source Insight下编写,并将所有代码进行关联,方便读写。

animal.h

#include <stdio.h>struct Animal{char name[128];int  age;int  sex;int  others;void (*peat)();void (*pbeat)();void (*test)();struct Animal *next;};struct Animal* putPersonInLink(struct Animal *phead);//先声明
struct Animal* putCatInLink(struct Animal *phead);
struct Animal* putDogInLink(struct Animal *phead);

mainPro.c

#include "animal.h"
#include <string.h>struct Animal* findUtilByName(char* str, struct Animal* phead)//结构体查询
{struct Animal *tmp= phead;if(phead== 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 *ptmp;phead = putCatInLink(phead);phead = putDogInLink(phead);phead = putPersonInLink(phead);//至此已经组合完成整个链表while(1){printf("please input:Tom,ahuang, xiaoming\n");  //链表的查询scanf("%s",buf);ptmp = findUtilByName(buf,phead);if(ptmp != NULL){ptmp->pbeat();ptmp->peat();}memset(buf, '\0',sizeof(buf)); //此处不能用strlen}return 0;
}

cat.c

#include "animal.h"void catEat()
{printf("cat eat fish\n");
}void catBeat()
{printf("cat bite your little brother\n");
}struct Animal cat = {.name = "Tom",.peat = catEat,.pbeat = catBeat};struct Animal* putCatInLink(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("dog eat shi\n");
}void dogBeat()
{printf("dog bite your little brother\n");
}struct Animal dog = {.name = "ahuang",.peat = dogEat,.pbeat = dogBeat};struct Animal* putDogInLink(struct Animal *phead)
{if(phead == NULL){phead = &dog;return phead;}else{dog.next = phead;phead = &dog;return phead;}
}

person.c

#include "animal.h"void personEat()
{printf("person eat rice\n");
}void personBeat()
{printf("person bite  your brother\n");
}struct Animal person = {.name = "xiaoming",.peat = personEat,.pbeat = personBeat};struct Animal* putPersonInLink(struct Animal *phead)
{if(phead == NULL){phead = &person;return phead;}else{person.next = phead;phead = &person;return phead;}
}

工厂模式的功能验证

将上述代码放到ubuntu下运行,效果如下:
在这里插入图片描述

用Source Insight编写代码会有一些编码格式问题,拿过来放到ubuntu上运行会出现乱码,最好不要有中文。

如若想在链表上加入其它的animal,直接新建编写一个.C文件,然后加入到链表中。
这样就完成类似不断给智能家居加入新功能,同时也有助于代码的维护。

往期文章

智能家居 (1) ——智能家居整体功能框架
智能家居 (2) ——设计模式的引入
智能家居 (3) ——工厂模式继电器控制灯
智能家居 (4) ——工厂模式火焰报警
智能家居 (5) —— LD3320语音模块二次开发
智能家居 (6) ——语音识别线程控制
智能家居 (7) ——网络服务器线程控制
智能家居 (8) ——智能家居项目整合(网络控制线程、语音控制线程,火灾报警线程)
网络编程知识预备(1) ——了解OSI网络模型
网络编程知识预备(2) ——浅显易懂的三次握手与四次挥手
网络编程知识预备(3) ——SOCKET、TCP、HTTP之间的区别与联系
网络编程知识预备(4) ——了解HTTP协议与HTTPS协议
网络编程知识预备(5) ——libcurl库简介及其编程访问百度首页
智能家居 (9) ——人脸识别摄像头安装实现监控功能
智能家居 (10) ——人脸识别祥云平台编程使用
智能家居 (11) ——树莓派摄像头捕捉人脸并识别
智能家居 (12) ——人脸识别整合到智能家居系统
智能家居 (13) ——智能家居加入手机app端控制

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/265867.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Pandas CookBook -- 04选取数据子集

选取数据子集 简书大神SeanCheney的译作&#xff0c;我作了些格式调整和文章目录结构的变化&#xff0c;更适合自己阅读&#xff0c;以后翻阅是更加方便自己查找吧 import pandas as pd import numpy as np 设定最大列数和最大行数 pd.set_option(max_columns,5 , max_rows, 5)…

卷积核和全连接层的区别_「动手学计算机视觉」第十六讲:卷积神经网络之AlexNet...

前言前文详细介绍了卷积神经网络的开山之作LeNet&#xff0c;虽然近几年卷积神经网络非常热门&#xff0c;但是在LeNet出现后的十几年里&#xff0c;在目标识别领域卷积神经网络一直被传统目标识别算法(特征提取分类器)所压制&#xff0c;直到2012年AlexNet(ImageNet Classific…

vnc配置备忘录

因为我开发板上要用到Qt&#xff0c;所以我在服务器上安装了Qt的开发环境&#xff0c;为了能远程连接到服务器我安装了VNC&#xff0c; 中间也是遇到了很多问题&#xff0c;比如连接上去后&#xff0c;只显示一个控制台的窗口&#xff0c;只能使用命令行。后来几经周折才搞定先…

编程挑战:字符串的完美度

题目详情我们要给每个字母配一个1-26之间的整数&#xff0c;具体怎么分配由你决定&#xff0c;但不同字母的完美度不同&#xff0c; 而一个字符串的完美度等于它里面所有字母的完美度之和&#xff0c;且不在乎字母大小写&#xff0c;也就是说字母F和f的完美度是一样的。 现在给…

网络编程知识预备(5) ——libcurl库安装及其编程访问百度首页

本文为学习笔记&#xff0c;整合课程内容以及下列文章&#xff1a; 其中&#xff0c;libcurl函数库常用字段解读部分&#xff1a; 参考博文&#xff1a;原文地址 作者&#xff1a;冬冬他哥哥 目录Libcurl库简介Libcurl等三方库的通用编译方法三方库使用前通读方法库的配置、编…

JSP(Servlet)中从连接池获取连接

1) 建立连接。 2) 执行SQL。 3) 处理结果。 4) 释放资源。 Connection pool&#xff1a;连接池 DataSource&#xff1a; LDAP ( Light directory access protocal )轻量级目录访问协议。 JNDI ( java naming director interface ) Java 命名目录接口。 使用连接池&#xff1a; …

文件系统模拟程序python_如何使用sh实现Python虚拟文件系统

我已经建立了一个模拟操作系统的Python脚本。它有一个命令提示符和一个虚拟文件系统。我使用shelve模块来模拟文件系统&#xff0c;它是多维的&#xff0c;以便支持目录的层次结构。但是&#xff0c;我在执行“cd”命令时遇到问题。我不知道如何进出目录&#xff0c;即使我有一…

udhcpd配置及使用

udhcpd配置及使用 1. 修改/etc/udhcpd.conf 修改 interface ra0 #default: eth0 为对应网卡 解决error, Unable to open /var/lib/misc/udhcpd.leases for reading&#xff0c; 在板子上执行以下命令&#xff1a; # mkdir -p /var/lib/misc/ # touch /var/lib/misc/udhcp…

智能家居 (9) ——人脸识别摄像头安装实现监控功能

目录摄像头模块安装安装mjpg-streamer库开启监控功能往期文章摄像头模块安装 注意&#xff1a;安装要下电安装&#xff0c;不能带电&#xff01;连接其他硬件模块的时候也是。 安装mjpg-streamer库 树莓派利用pi Camera模块&#xff0c;通过mjpg-streamer软件获取视频&#xf…

清理localstorage_vue 界面刷新数据被清除 localStorage的使用详解

localStorage是html5新增的一个本地存储API,它有5M的大小空间,通过(key,value)的方式存储在浏览器中window.localStorage.setItem(key, value); //储存文件window.localStorage.getItem(key); //读取文件window.localStorage.removeItem(key); //清除文件vue中使用方法&#xf…

洛谷p2234/BZOJ1588 [HNOI2002]营业额统计

题目链接&#xff1a;洛谷BZOJ 分析&#xff1a; 好像没有什么好说的就是一个平衡树的板子……唯一要注意的就是这里要找的并不是严格的前驱和后继&#xff0c;因为如果找到之前某一天的营业额和它相等那么差就是0&#xff0c;所以我们仍然在结构体中开一个域cnt来存储同一个元…

WSDL中文版——详解

为什么使用WSDL? 像Internet协议之类的标准有没有为权威所利用&#xff0c;或者人们这样看待它是因为顺之所获的好处远远超出了代价&#xff1f;曾经有许多试图建立的标准都流产了。有时候&#xff0c;那些还没有普遍使用的标准甚至由法令或政府规定强行推出&#xff1a;Ada语…

设备树和pinctrl粗解

上次文章中 我以DS18b20为例&#xff0c;在设备树中定义了ds18b20的资源&#xff08;device&#xff09;&#xff0c;当时是依葫芦画瓢&#xff0c;没有深入探究&#xff0c;本文主要探讨下pin在设备树中的描述 参考文章&#xff1a;Linux内核中的GPIO系统之&#xff08;3&…

八大排序算法(C语言实现)

摘自&#xff1a;八大排序算法&#xff08;C语言实现&#xff09; 作者&#xff1a;2021dragon 发布时间&#xff1a; 2021-05-16 10:46:37 网址&#xff1a;https://blog.csdn.net/chenlong_cxy/article/details/116563972 目录 直接插入排序希尔排序选择排序堆排序冒泡排序快…

python qq签到_Yii Framework 中文网每天签到 Python 脚本

Yii 春节前的重磅新闻&#xff1a;Yii 2.0.16 版本发布了经过国内 Yii 使用者坚持不懈的进行国际化翻译&#xff0c;以及在中国进行大量的宣传和推广&#xff0c;Yii China 目前已经成为全球最大的 Yii 中文社区也就是 Yii Framework 中文网&#xff0c;地址为 www.yiichina.co…

codeforces 1060 A

https://codeforces.com/contest/1060/problem/A 题意&#xff1a;电话号码是以8开头的11位数&#xff0c;给你n 个数问最多可以有多少个电话号码 题解&#xff1a;min&#xff08;8的个数&#xff0c;n/11&#xff09; 代码如下&#xff1a; #include <map> #include &l…

嵌入式linux 自动获取IP 及 自动校时

最近要调用百度人脸识别API做个东西&#xff0c;发现百度API在桌面端QT程序跑的贼溜&#xff0c;可以到了嵌入式板子上发现就post没了返回信息。 一、嵌入式端udhcpc自动获取IP 1.在开发板建立文件夹#mkdir /usr/share/udhcpc/ -p 2.先拷贝busybox 源码目录下的 busybox-1.27…

MYSQL MVCC实现及其机制

多版本并发控制 Multiversion Concurrency Control 大部分的MySQL的存储 引擎&#xff0c;比如InnoDB&#xff0c;Falcon&#xff0c;以及PBXT并不是简简单单的使用行锁机制。它们都使用了行锁结合一种提高并发的技术&#xff0c;被称为MVCC&#xff08;多版本并 发控制&#x…

树莓派外设开发之控制继电器(组)

目录控制继电器控制继电器组控制继电器 选择7号引脚作为继电器信号输出控制端。 代码&#xff1a; #include <wiringPi.h> #include <stdio.h> #define SWITCHER 7 // 7为树莓派物理引脚编码和wiringPi编码。在树莓派功能名为GPIO.7int main() {int cmd;if( wiri…

piovt table python_python – Pandas:pivot和pivot_table之间的区别...

我有以下数据帧.df.head(30)struct_id resNum score_type_name score_value0 4294967297 1 omega 0.0648401 4294967297 1 fa_dun 2.1856182 4294967297 1 fa_dun_dev 0.0000273 4294967297 1 fa_dun_semi 2.1855914 4294967297 1 ref -1.1911805 4294967297 2 rama -0.7951616…