首页 > 其他分享 >设计模式DP-模版模式

设计模式DP-模版模式

时间:2024-03-28 15:44:38浏览次数:28  
标签:初始化 ADM obj 模版 void AMD init 设计模式 DP

#include <stdio.h>
#include <string.h>
#include <stdlib.h>


typedef struct Interface_t
{
	/*初始化外设USB、SPI、IIC等*/
	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;
// 这里定义的是AMD,也可以复制一份改成Interl
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);
}
//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;
}

//二次重写 AMD 外设初始化程序
void ADM_init_peripheral_v1(void *obj)
{
    printf("新接口: 初始化 ADM 的外设: USB3.0、SPI、IIC接口...\n");
}
//二次重写 AMD 硬盘初始化程序
void ADM_init_disk_V1(void *obj)
{   
    printf("新接口: 初始化AMD 硬盘: 三星固态硬盘(512G)、东芝固态硬盘(128G)...\n");
}

int main(int argc, char *argv[])
{
	Interface_t *cpu=NULL;
	//创建一个AMD对象
	cpu = (Interface_t*)construct_amd_cpu(); 
	//调用模板 初始化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;
}

标签:初始化,ADM,obj,模版,void,AMD,init,设计模式,DP
From: https://www.cnblogs.com/starcos/p/18101873

相关文章

  • 设计模式DP-原型模式
    #include<stdio.h>#include<string.h>#include<stdlib.h>//定义抽象接口typedefstructinterface_t{ structinterface_t*(*clone)(void*obj); void(*set)(void*obj,constchar*name,intage); void(*show)(void*obj); charname[32];......
  • 一类适合记忆化搜索的区间dp
    https://www.luogu.com.cn/problem/P5752https://codeforces.com/contest/598/problem/Ecf这个题考虑dp预处理,状态是三维的,转移是分割方案和所分块需要获得的巧克力数量。最后题目多次询问可以o(1)快速查询的//Problem:E.ChocolateBar//Contest:Codeforces-Educational......
  • 分享23种追女生的方式,教你同时把追MM和设计模式融汇贯通(下
    想知道咱们公司最新MM情报吗?加入公司的MM情报邮件组就行了,tom负责搜集情报,他发现的新情报不用一个一个通知我们,直接发布给邮件组,我们作为订阅者(观察者)就可以及时收到情报啦。观察者模式:观察者模式定义了一种一队多的依赖关系,让多个观察者对象同时监听某一个主题对象......
  • TCP与UDP:传输层协议对比
    ......
  • DDPG强化学习算法应用到TORCS仿真平台
    一、DDPG算法介绍1.前身DQN算法在介绍DDPG算法之前,需要首先明确它的前身DQN算法。DQN(DeepQ-Network)是一种用于强化学习的深度学习算法,由DeepMind公司开发。它结合了深度学习和Q-learning算法,旨在解决复杂环境下的强化学习问题。DQN算法在解决复杂环境下的强化学习问题方面取......
  • ThreadPool-线程池使用及原理
    1.线程池使用方式示例代码://一池N线程Executors.newFixedThreadPool(int)//一个任务一个任务执行,一池一线程Executors.newSingleThreadExecutorO//线程池根据需求创建线程,可扩容,遇强则强Executors.newCachedThreadPool()//自定义线程池方式newThreadPoolExec......
  • 洛谷P1443 马的遍历(bfs模版题)
    洛谷P1443马的遍历https://www.luogu.com.cn/problem/P1443一道经典的bfs入门题这里贴上代码//#defineLOCAL1#define_CRT_SECURE_NO_WARNINGS1#include<bits/stdc++.h>//#defineintlonglong#defineendl"\n";usingnamespacestd;constintmaxn=500;intG......
  • 动态规划刷题(算法竞赛、蓝桥杯)--数字三角形(线性DP)
    1、题目链接:[USACO1.5][IOI1994]数字三角形NumberTriangles-洛谷#include<bits/stdc++.h>usingnamespacestd;intr;constintN=1010;inta[N][N];intmain(){ cin>>r; for(inti=1;i<=r;i++){ for(intj=1;j<=i;j++){ cin>>a[i][j]; ......
  • 最短Hamilton路径(状态压缩DP)
    给定一张 n 个点的带权无向图,点从 0∼n−1 标号,求起点 0 到终点 n−1的最短Hamilton路径。Hamilton路径的定义是从 0 到 n−1不重不漏地经过每个点恰好一次。输入格式第一行输入整数 n。接下来 n 行每行 n 个整数,其中第 i 行第 j个整数表示点 i ......
  • 管道(NamedPipeClientStream)连接报“访问路径被拒绝”
    问题:NamedPipeClientStream对象调用Connect(毫秒)时报“访问路径被拒绝”解决:在服务端(NamedPipeServerStream)中添加PipeSecurity对象SecurityIdentifiersecurityIdentifier=newSecurityIdentifier(WellKnownSidType.AuthenticatedUserSid,null);PipeSecuritypipeSecur......