orangepiZero2智能家居(一)程序设计思路
·
目录
1.智能家居架构图

2.设计模式的引入
1.什么是设计模式
设计模式是代码经验的总结,代码的稳定性高,拓展性强。是一系列的编程思想,一共23种模式。
设计模式的目标是提高代码的可读性、稳定性、重用性、拓展性。
工厂模式是设计模式的一种。
算法并不是设计模式,只是解决问题的一种方法。
设计模式描述了紧密结合的类与对象。
2.什么是类和对象
1.概述
类是一种用户自定义的数据类型。在C语言中结构体可以充当类。
对象是类的一种实现,
struct Animal{
int age;
int sex;//成员属性
void *peat();
void *pbeadt(); //成员方法
}
struct Animal dog;
struct Animal cat;
dog cat都是一种类的对象。
2.实现
#include <stdio.h>
#include <stdlib.h>
struct Anmial{
char name[32];
int age;
int sex;
void (*peat)();//函数指针 存放的是函数的地址
void (*pbeat)();
};
void dogEat(){
printf("狗吃屎\n");
}
void catEat(){
printf("猫吃鱼\n");
}
void dogBeat(){
printf("用嘴咬\n");
}
void catBeat(){
printf("用爪子挠\n");
}
int main()
{ struct Anmial dog;
struct Anmial cat;
dog.peat=dogEat;//函数名就是函数的地址
cat.peat=catEat;
dog.pbeat=dogBeat;
cat.pbeat=catBeat;
dog.peat();
cat.peat();
dog.pbeat();
cat.pbeat();
system("pause");
return 0;
}
代码改进——C语言结构体的新玩法
C语言结构体中有很多的属性,一些属性我们并不一定会用到,于是采用下面的方法。
#include <stdio.h>
#include <stdlib.h>
struct Anmial{
char name[32];
int age;
int sex;
void (*peat)();//函数指针 存放的是函数的地址
void (*pbeat)();
};
void dogEat(){
printf("狗吃屎\n");
}
void catEat(){
printf("猫吃鱼\n");
}
void dogBeat(){
printf("用嘴咬\n");
}
void catBeat(){
printf("用爪子挠\n");
}
int main()
{ struct Anmial dog={
.name="阿黄",
.age=10,
.peat=dogEat,
.pbeat=dogBeat
};
struct Anmial cat={
.name="猫咪",
.peat=catEat,
.pbeat=catBeat
};
//dog.peat=dogEat;
//cat.peat=catEat;
//dog.pbeat=dogBeat;
//cat.pbeat=catBeat;//函数名就是函数的地址
dog.peat();
cat.peat();
dog.pbeat();
cat.pbeat();
system("pause");
return 0;
}
3.什么是工厂模式
1.概述
工厂模式是常用的设计模式之一。
这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
在公厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且使用一个共同的接口(API)来指向新建的对象。
2.实现

1.anmial.h
#include <stdio.h>
struct Anmial{
char name[32];
int age;
int sex;
void (*peat)();//函数指针 存放的是函数的地址
void (*pbeat)();
struct Anmial *next;
};
struct Anmial *putCatInLink(struct Anmial *phead);
struct Anmial *putDogInLink(struct Anmial *phead);
struct Anmial *putPersonInLink(struct Anmial *phead);
2.cat.c
#include "anmial.h"
void catEat(){
printf("猫吃鱼\n");
}
void catBeat(){
printf("用爪子挠\n");
}
struct Anmial cat={
.name="TOM",
.peat=catEat,
.pbeat=catBeat
};
struct Anmial *putCatInLink(struct Anmial *phead){
if(phead == NULL){
phead=&cat;
return phead;
}else{
cat.next=phead;
phead=&cat;
return phead;
}
}
3.dog.c
#include "anmial.h"
void dogBeat(){
printf("用嘴咬\n");
}
void dogEat(){
printf("狗吃屎\n");
}
struct Anmial dog={
.name="huang",
.age=10,
.peat=dogEat,
.pbeat=dogBeat
};
struct Anmial *putDogInLink(struct Anmial * phead){
if(phead == NULL){
phead=&dog;
return phead;
}else{
dog.next=phead;
phead=&dog;
return phead;
}
}
4.mainPro.c
#include "anmial.h"
#include <string.h>
struct Anmial* findUntilByName(char *cmd,struct Anmial*phead){
struct Anmial *ptmp=phead;
if(ptmp == NULL){
printf("none\n");
return NULL;
}else{
while(ptmp!=NULL){
if(strcmp(ptmp->name,cmd)==0){
return ptmp;
}
ptmp=ptmp->next;
}
printf("not find\n");
return NULL;
}
}
int main(){
struct Anmial *ptmp=NULL;
struct Anmial *phead=NULL;
char cmd[128]={'\0'};
phead=putCatInLink(phead);
phead=putDogInLink(phead);
phead=putPersonInLink(phead);
while(1){
printf("input TOM huang xiaoli\n");
scanf("%s",cmd);
ptmp=findUntilByName(cmd,phead);
if(ptmp!=NULL){
ptmp->peat();
ptmp->pbeat();
}
memset(cmd,'\0',sizeof(cmd));
}
return 0;
}
5.person.c
#include "anmial.h"
void personBeat(){
printf("用脚踢\n");
}
void personEat(){
printf("人吃米\n");
}
struct Anmial person={
.name="xiaoli",
.age=10,
.peat=personEat,
.pbeat=personBeat
};
struct Anmial *putPersonInLink(struct Anmial * phead){
if(phead == NULL){
phead=&person;
return phead;
}else{
person.next=phead;
phead=&person;
return phead;
}
}
4.智能家居代码架构图


昇腾计算产业是基于昇腾系列(HUAWEI Ascend)处理器和基础软件构建的全栈 AI计算基础设施、行业应用及服务,https://devpress.csdn.net/organization/setting/general/146749包括昇腾系列处理器、系列硬件、CANN、AI计算框架、应用使能、开发工具链、管理运维工具、行业应用及服务等全产业链
更多推荐

所有评论(0)