| #include <stdio.h> |
| #include <string.h> |
| #include <stdlib.h> |
| |
| |
| typedef struct Interface_t |
| { |
| |
| void (*init_peripheral)(void *obj); |
| |
| void (*init_disk)(void* obj); |
| |
| void (*init_memory)(void* obj); |
| |
| void (*init_net)(void *obj); |
| |
| void (*init)(void *obj); |
| }Interface_t; |
| |
| typedef struct AMDCpuStart_t |
| { |
| void (*init_peripheral)(void *obj); |
| void (*init_disk)(void* obj); |
| void (*init_memory)(void* obj); |
| void (*init_net)(void *obj); |
| void (*init)(void *obj); |
| }AMDCpuStart_t; |
| static void ADM_init_peripheral(void *obj) |
| { |
| printf("初始化AMD 外设...\n"); |
| } |
| static void ADM_init_disk(void *obj) |
| { |
| printf("初始化AMD 硬盘...\n"); |
| } |
| static void ADM_init_memory(void *obj) |
| { |
| printf("初始化AMD 内存...\n"); |
| } |
| static void ADM_init_net(void *obj) |
| { |
| printf("初始化AMD 网络...\n"); |
| } |
| |
| static void ADM_init(void *obj) |
| { |
| AMDCpuStart_t *amd = (AMDCpuStart_t*)obj; |
| printf("AMD CPU 上电初始化流程: \n"); |
| amd->init_peripheral(amd); |
| amd->init_disk(amd); |
| amd->init_memory(amd); |
| amd->init_net(amd); |
| } |
| |
| AMDCpuStart_t* construct_amd_cpu(void) |
| { |
| AMDCpuStart_t* obj = (AMDCpuStart_t*)malloc(sizeof(AMDCpuStart_t)); |
| obj->init = ADM_init; |
| obj->init_disk = ADM_init_disk; |
| obj->init_memory = ADM_init_memory; |
| obj->init_net = ADM_init_net; |
| obj->init_peripheral = ADM_init_peripheral; |
| return obj; |
| } |
| |
| |
| void ADM_init_peripheral_v1(void *obj) |
| { |
| printf("新接口: 初始化 ADM 的外设: USB3.0、SPI、IIC接口...\n"); |
| } |
| |
| void ADM_init_disk_V1(void *obj) |
| { |
| printf("新接口: 初始化AMD 硬盘: 三星固态硬盘(512G)、东芝固态硬盘(128G)...\n"); |
| } |
| |
| int main(int argc, char *argv[]) |
| { |
| Interface_t *cpu=NULL; |
| |
| cpu = (Interface_t*)construct_amd_cpu(); |
| |
| cpu->init(cpu); |
| |
| printf("\n二次重写的硬盘和外设初始化接口:\n"); |
| |
| cpu->init_peripheral = ADM_init_peripheral_v1; |
| |
| cpu->init_disk = ADM_init_disk_V1; |
| |
| cpu->init(cpu); |
| free(cpu); |
| cpu = NULL; |
| |
| return 0; |
| } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步