1、智能家居功能拆分
2、设计模式
智能家居代码架构—简单工厂模式
设计模式:
代码设计经验的总结,稳定、拓展性更强,是一系列编程思想。有23种,代码更容易被他人理解、保证代码可靠性、程序的重用性。设计模式通常描述了一组相互紧密作用的类与对象。
算法不是设计模式,因为算法致力于解决问题而非设计问题。
类和对象:
类是一种用户定义的引用数据类型,也称类类型。结构体
对象:类的一种具象
工厂模式:
这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。
//animal.h
#include <stdio.h>
struct Animal{
char name[128];
int sex;
int age;
void *peat();
void *pbeat();
struct Animal *next;
}
struct Animal* putCatInLink(struct Animal *phread);
struct Animal* putDogInLink(struct Animal *phread);
//cat.c
#include "animal.h"
void catEat()
{
printf("cat bite fish\n");
}
void catBeat()
{
printf("cat catch person\n");
}
struct Animal cat = {
.name = "Tom",
.peat = catEat,
.pbeat = catBeat
};
struct Animal* putCatInLink(struct Animal *phread)
{
if(phread == NULL){
phread = &cat;
return phread;
}else{
cat.next = phread;
phead = &cat;
return phead;
}
}
//dog.c
#include "animal.h"
void dogEat()
{
printf("dog bite meat\n");
}
void dogBeat()
{
printf("dog bite person\n");
}
struct Animal dog = {
.name = "huang",
.peat = dogEat,
.pbeat = dogBeat
};
struct Animal* putDogInLink(struct Animal *phread)
{
if(phread == NULL){
phread = &dog;
return phread;
}else{
dog.next = phread;
phead = &dog;
return phead;
}
}
//main.c
#include "animal.h"
struct Animal* findName(char *str, struct Animal *phead)
{
struct Animal *tmp = head;
if(phead == NULL){
printf("NULL\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);
while(1){
printf("input your choice: Tom huang\n");
scanf("%s", buf);
ptmp = findName(buf,phead);
if(ptmp != NULL){
ptmp->pbeat();
ptmp->peat();
}
memset(buf, '\0', sizeof(buf));
}
return 0;
}