一、依賴倒置的場景需求:函數
1) 模塊A、B互相依賴,耦合較大,但願改爲單向依賴module
2)模塊A是底層,模塊B是上層,底層不該該調用上層,即只容許B調用A。call
二、未倒置前,A調用B:
module_a_func
調用module_b_func(in_data, out_data)di
module_b:
提供module_b_funcdata
三、倒置後,B調用A:底層
module_a:
提供func_register(int modid, int (*proc)func(indata_t in, outdata_t out));
module_a_func:
//call register funcgis
module_b:
提供module_b_func
在模塊B或其餘初始化註冊函數:
func_register(b, module_b_func)註冊
四、更進一步,模塊C也調用func_register註冊一個函數,模塊A分別調用B/C註冊的函數,這就是所謂的觀察者模式了
module_c: 提供module_c_func在模塊C或其餘初始化註冊函數:func_register(c, module_c_func)