依賴倒置

一、依賴倒置的場景需求:函數

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)

相關文章
相關標籤/搜索