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 ->构造函数不允许隐式转换参数类型

 

posted @   牧羊人邱Sir  阅读(121)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
· 零经验选手,Compose 一天开发一款小游戏!
点击右上角即可分享
微信分享提示