c语言的钩子与C++的策略模式
钩子和策略模式都是为了使coding解耦,防止特性部分做了修改,主线也要跟着修改
1. c语言钩子:
特性模块:功能函数,调用注册函数
主线模块:注册函数,定义钩子(通常是全局变量),调用钩子
ps. 注册函数不一定每次仅挂一个钩子,可以再给一个结构体接口,注册函数批量挂很多钩子。
ps. 一个简化写法是不定义注册函数了,直接把钩子变量写权限拿过来复制。(需要判断代码是否有风险)
ps. 功能函数经常被叫做回调函数.
2. c++策略模式:
特性模块:从策略基类派生一个新特性类,实例化对象并调用set方法
主线模块:以策略类(指针)作为成员变量的大类,其中包括调用策略的成员函数(类比c语言的钩子),set策略的成员函数(类比注册函数),定义策略基类(功能函数为纯虚函数,析构函数也声明为虚函数(原因见ref))
ref:
策略模式: https://blog.csdn.net/lanchunhui/article/details/51001077
虚析构函数:https://blog.csdn.net/weicao1990/article/details/81911341 -> 只要有多态,基类的析构记得声明为虚函数
虚函数的实现:https://blog.csdn.net/qq_33369979/article/details/108410855 -> 直接理解为子类有一个表把所有该调用的函数地址存下来,一旦使用的多态(基类指针的方法是虚函数),就去找子类的函数表。
explicit关键字:https://zhuanlan.zhihu.com/p/52152355 ->构造函数不允许隐式转换参数类型
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
· 零经验选手,Compose 一天开发一款小游戏!