COM學習筆記6_COM的複用:包容和聚合

繼承可分實現繼承和接口繼承
接口繼承 :一個類只能繼承另一個接口。一個接口是裏面只有純虛函數,沒有數據和函數實現
實現繼承 :一個類繼承另一個類,包括基類中的各種數據和實現

COM不支持實現繼承,因爲實現繼承會造成較大耦合,違背了COM的思想。

COM實現複用可採用包容和聚合

--------------------------------------------------------------------------------------------------------
包容類似於設計模式中的代理模式,外部組件將接口調用轉發給內部組件
例如組件CB(內部組件)實現了IY接口,組件CA(外部組件)要複用組件CB的IY接口


--------------------------------------------------------------------------------------------------------
聚合則直接把內部組件的接口指針返回給客戶
相對來說包容的實現比較簡單,而聚合複雜在於它不能僅僅簡單的把內部組件的接口指針返回給客戶,
這是由於QueryInterface有一定的規則,僅僅簡單暴露內部組件的接口指針會違背這些規則。
所以內部組件必須有一個標誌,判斷自己是否被聚合,在不同情況下采取不同的方式處理QueryInterface,AddRef和Release接口。
這個標誌就是維護一個指針,當他爲空時,表示自己沒有被聚合,否則,則自己被聚合,這個指針指向對應外部組件。
在CoCreateInstance和IClassFactory::CreateInstance原型中都有一個IUnknown *pUnkOuter參數,它就是用來初始化這個指針標誌的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章