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

Posted 行稳方能走远

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了智能家居 ——设计模式的引入相关的知识,希望对你有一定的参考价值。

设计模式的概念引入

在这里插入图片描述

工厂模式的实现

在这里插入图片描述

所有代码最好在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) ——内容整合(网络TCP、语音控制灯,火灾报警系统)
网络编程知识预备(1) ——了解OSI网络模型
网络编程知识预备(2) ——浅显易懂的三次握手与四次挥手
网络编程知识预备(3) ——SOCKET、TCP、HTTP之间的区别与联系
网络编程知识预备(4) ——了解HTTP协议与HTTPS协议
网络编程知识预备(5) ——libcurl库简介及其编程使用
智能家居 (9) ——人脸识别摄像头安装实现监控功能
智能家居 (10) ——人脸识别祥云平台编程使用
智能家居 (11) ——树莓派摄像头捕捉人脸并识别
智能家居 (12) ——人脸识别整合到智能家居系统

以上是关于智能家居 ——设计模式的引入的主要内容,如果未能解决你的问题,请参考以下文章

谷歌浏览器调试jsp 引入代码片段,如何调试代码片段中的js

如何设置 vscode 的代码片段,以便在自动完成后自动触发 vscode 的智能感知?

这个家居大牌将新零售模式与智能服务操作系统 引入北京国际家居展 获得众多点赞

SQL Prompt7.2下载及破解教程

thymeleaf引入公共页面的某个片段

快速剪辑-助力度咔智能剪辑提效实践