一、主流程设计
#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;}
}