模板的钩子方法-继承---与策略的回调函数--组成--控制反转

具体策略类的算法可以用lambda表达式去传入,这样就可以解决产生很多具体策略类的问题

将代码参数化,比如一段代码需要根据分支选择不同的执行,此时就把这段代码封装到参数位置,

也就是一个Lambda表达式,用户根据自己需求自己写逻辑。(当然还可以是接口类型的参数,方法写在了实现类而已)

 

定义
钩子方法是一种在面向对象编程中使用的技术,通常定义在抽象类或基类中。它是一个默认实现为空或只提供基础逻辑的方法,子类可以通过覆盖(override)该方法来添加特定行为。钩子方法由父类在特定的执行点自动调用,从而允许子类“钩入”父类的算法或流程。

特点

基于继承:需要创建子类并重写钩子方法。

由框架/父类控制调用时机:开发者只需定义“做什么”,而“何时做”由父类决定。

常用于模板方法模式:模板方法定义了算法骨架,钩子方法则提供可选的扩展点。

 

 

回调函数
定义
回调函数是一段可执行的代码(如函数、方法、lambda 表达式),它作为参数传递给另一个函数(或对象),并在特定事件发生或条件满足时被调用。回调函数强调的是控制反转:调用者不直接执行逻辑,而是将逻辑“回传”给调用方执行。

特点

基于组合/参数传递:通常通过函数指针、委托、接口或 lambda 实现。

由被调用方在适当时机执行:调用者注册回调,由库或框架在特定时刻触发。

广泛用于异步编程、事件处理、策略模式。

 

两者都允许用户代码介入系统内部,实现控制反转

在某些场景下,两者的概念会模糊:例如,一些框架的“钩子”实际上是通过回调函数实现的(如 WordPress 的 apply_filters),而不是通过继承。这时“钩子”成为一种更泛化的说法,泛指扩展点。

两者都遵循“好莱坞原则”——“不要打电话给我们,我们会打电话给你”(Don't call us, we'll call you)。

 

posted on 2026-03-18 08:45  daofree  阅读(2)  评论(0)    收藏  举报