一、主流程设计
#include <stdio.h>
int main(){
//指令工厂初始化
//控制外设工厂初始化
//线程池
return 0;
}
1、工厂模式结构体定义
(1)指令工厂 inputCmd.h
struct InputCmd{
char cmdName[128];//指令名称
char cmd[32];//指令
int (*Init)(char *name,char *ipAdresschar *port);//初始化函数
int (*getCmd)(char *cmd);//获取指令函数
char *log[1024];//日志
struct InputCmd *next;
}
定义一个名为 `InputCmd` 的结构体,包含以下成员:
- char cmdName[128]:一个长度为128的字符数组,用于存储指令名称。
- char cmd[32]:一个长度为32的字符数组,用于存储指令。
- int (*Init)(char *name, char *ipAdress, char *port):一个初始化相关指令操作的函数指针,它指向一个返回值为整型,接受三个字符指针类型的参数(名称、IP地址、端口号)的函数。
- int (*getCmd)(char *cmd):一个用于获取指令的函数指针,它指向一个返回值为整型,接受一个字符指针类型的参数(指令)的函数。
- char *log[1024]:一个长度为1024的字符指针数组,用于存储日志信息。
- struct InputCmd *next:一个指向 `struct InputCmd` 类型的指针,用于链表的连接。
(2)外设工厂 controlDevices.h
struct Devices{
char devicesName[128];//设备名称
int status;//状态:开&关
int (*open)();//打开设备
int (*close)();//关闭设备
int (*devicesInit)();//设备初始化
int (*readStatus)();//读取设备状态
int (*changeStatus)(int status);//改变设备状态
struct Devices *next;
}
定义一个名为 `Devices` 的结构体,包含以下成员:
- char devicesName[128]:一个长度为128的字符数组,用于存储设备名称。
- int status:一个整型变量,用于存储设备的状态(如开/关等)。
- int (*open)():一个用于打开相关设备的函数指针,它指向一个返回值为整型、无参数的函数。
- int (*close)():一个用于关闭相关设备的函数指针,它指向一个返回值为整型、无参数的函数。
- int (*devicesInit)():一个用于初始化相关设备的函数指针,它指向一个返回值为整型、无参数的函数。
- int (*readStatus)():一个用于读取设备当前状态的函数指针,它指向一个返回值为整型、无参数的函数。
- int (*changeStatus)(int status):一个用于更改设备状态的函数指针,它指向一个返回值为整型,接受一个字符指针类型的参数(设备状态)的函数。
- struct Devices *next:一个指向 `struct Devices` 类型的指针,通常链表的连接。
二、外设框架编写
以浴室灯模块为例
bathroomLight.c
1、创建外设工厂对象bathroomLight
struct Devices BathroomLight{
.name="bathroomLight",
.open=bathroomLight_open,
.close=bathroomLight_close,
.devicesInit=bathroomLight_init,
.changeStatus=bathroomLight_status
}
2、编写相关函数框架
int bathroomLight_open(){
}
int bathroomLight_close(){
}
int bathroomLight_init(){
}
int bathroomLight_status(int status){
}
3、将浴室灯相关操作插入外设工厂链表等待被调用
sturct Devices *addbathroomLightToDevicesLink(stuuct Devices *phead){
if(phead==NULL){
ruturn &bathroomLight;
}else{
bathroomLight.next=phead;
phead=&bathroomLight;
}
}