欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
COM之包容與聚合
COM的“可重用性”特性包括兩種模型:包容和聚合
    包容和聚合是COM的兩種重用模型,它們的思路基本一致,只是在實(shí)現方法上有所不同,下面簡(jiǎn)要總結一下實(shí)現方法:
1.包容:
    假定我們已經(jīng)實(shí)現了一個(gè)COM對象,不妨稱(chēng)它為對象A,它實(shí)現了接口ISomeIntf,不久之后,考慮到新的需要,我們要實(shí)現一個(gè)新的COM對象,稱(chēng)它為B,它既要實(shí)現接口ISomeIntf,也要實(shí)現接口IOtherIntf,而且,ISomeIntf接口所提供的服務(wù)與對象A所提供的服務(wù)基本一致,于是,我們考慮在實(shí)現對象B的過(guò)程中重用對象A的功能,只需要實(shí)現新添加的功能就可以完成對象B的開(kāi)發(fā)工作。
    最簡(jiǎn)單的想法就是在實(shí)現對象B的接口ISomeIntf時(shí)調用對象A的相應成員函數,對于對象A來(lái)說(shuō),它只是當作一個(gè)普通的COM對象,而對于對象B來(lái)說(shuō),雖然它本身是一個(gè)COM對象,但它同時(shí)也是對象A的客戶(hù),因為它調用對象A的功能服務(wù)。對象B不再重復實(shí)現對象A已經(jīng)實(shí)現的功能,而是調用對象A的服務(wù)來(lái)提供對外的功能服務(wù),對于對象B的客戶(hù)來(lái)說(shuō),它根本不知道對象A的存在,可以說(shuō)它是最大的受益者,因為它得到了全面的功能服務(wù)。這樣的情形,我們稱(chēng)為對象B包容對象A,或者對象A被對象B包容,可以用下圖表示這種包容關(guān)系。
   
    包容的模型在實(shí)際使用過(guò)程可以非常靈活,對象B的成員函數在調用對象A的接口成員之前或者調用返回之后也可以進(jìn)行其他一些操作,因此,對象B的ISomeIntf接口提供的功能可以超過(guò)對象A的接口功能,返回結果也可以不一致。更有甚者,對象B的接口與對象A的接口不一定相同,對象B和對象A可以只是一個(gè)客戶(hù)和服務(wù)程序的關(guān)系而客戶(hù)程序所看到的只是對象B所暴露出來(lái)的接口,對象A的創(chuàng )建和釋放完全在對象B內部進(jìn)行。一般來(lái)說(shuō),對象A的生存期包含在對象B的生存期之內。比較簡(jiǎn)單的做法是在對象B被構造時(shí),同時(shí)創(chuàng )建對象A,并保存好對象A的接口指針,以便在對象B的成員函數中使用;當對象B被釋放時(shí),它先把對象A釋放掉,這樣可以完成對象B對對象A的嵌套使用,形成包容對象模型。如果要優(yōu)化程序并提高資源利用率的話(huà),賜教對象B可以在需要的時(shí)候才創(chuàng )建對象A,在不需要的時(shí)候及時(shí)釋放掉。
2.聚合:
    然后我們再看看對象聚合的情形。假定我們要實(shí)現一個(gè)對象B,它支持兩個(gè)接口ISomeIntf和IOtherIntf,同時(shí)我們發(fā)現對象B所提供的ISomeIntf功能在另一個(gè)對象A中已經(jīng)實(shí)現,而且不需要修改就可以滿(mǎn)足對象B的要求。如果采用對象包容模型,則對象B要實(shí)現兩個(gè)接口,并且在接口ISomeIntf的成員函數中調用對象A的相應函數,但現在我們采用聚合的模型來(lái)實(shí)現對象B。對象B本身并不實(shí)現接口ISomeIntf,它只實(shí)現IOtherIntf接口,但它也能提供接口ISomeIntf的功能,當對象B的客戶(hù)請求接口ISomeIntf時(shí),對象B把對象A的ISomeIntf接口指針暴露給客戶(hù)程序,因此,客戶(hù)程序調用ISomeIntf時(shí)直接與對象A進(jìn)行交互,但客戶(hù)并沒(méi)有感覺(jué)到在與對象A進(jìn)行交互,它仍覺(jué)得自己是在與對象B進(jìn)行交互。聚合模型如下圖所示。
     在聚合模型中,被聚合的對象A雖然直接向對象B的客戶(hù)程序提供功能服務(wù),但它的生存期仍受對象B控制,而且其他的一些行為也受對象B控制,包括內部狀態(tài)初始化、獲取數據等待,對象B借對象A向客戶(hù)程序提供ISomeIntf接口服務(wù)。實(shí)現聚合的著(zhù)急在于對象B的QurayInterface成員函數,當客戶(hù)程序向對象B請求ISomeIntf接口時(shí),對象B的QuaryInterface函數把對象A的ISomeIntf接口指針?lè )诺捷敵鰠抵?,客?hù)程序就獲得了對象A的ISomeIntf接口指針,可以直接調用接口成員函數了。
    但事情并沒(méi)有這么簡(jiǎn)單,當月客戶(hù)程序通過(guò)ISomeIntf::QuaryInterface函數又請求其他的接口指針時(shí),問(wèn)題就復雜了,因為對象A并不知道對象B實(shí)現了什么樣的接口,而據COM規范,客戶(hù)程序從對象B的任一個(gè)接口可以獲取其他的任務(wù)接口指針。而且,在正常情況下,客戶(hù)程序調用對象A的ISomeIntf::QuaryInterface函數請求IUnknown接口指針獲得的是對象A的IUnknown接口指針,而客戶(hù)程序調用對象B的IOtherIntf::QuaryInterface函數請求IUnknown接口指針獲得的是對象B的IUnkown接口指針獲得的是對象B的IUnknown接口指針,而COM規范要求對象的IUnknown接口指針必須唯一。因為,為了使用聚合能順利實(shí)現,對象A也必須能夠適應在被聚合的情況下進(jìn)行特殊的處理,尤其接口的QuaryInterface成員函數,在被聚合的情況下,當客戶(hù)請求它所不支持的接口或者請求IUnkown接口時(shí),它必須把控制交給外部對象,由外部對象決定客戶(hù)程序的請求結果。
    聚合涉及到聚合對象和被聚合對象雙方的協(xié)作,并不是每個(gè)對象都能夠支持聚合特性,但聚合體現了組件軟件真正意義上的重用。而包容的重用性完全建立在客戶(hù)/服務(wù)器模型相對性的基礎上,實(shí)際上也就是客戶(hù)程序和組件程序的嵌套關(guān)系。這是包容和聚合本質(zhì)的不同。
    當組件系統經(jīng)過(guò)一定時(shí)間的發(fā)展后,很重要的工作是組件系統的升級更新或者系統擴展,包括接口的擴展。在實(shí)現新的接口或開(kāi)發(fā)新的組件對象時(shí),就充分考慮重用已有的組件軟件。根據包容和聚合的不同結構,我們在選擇重用模型時(shí),可以依據這樣的原則:在一個(gè)組件對象在行為上更類(lèi)似于另一個(gè)組件對象的客戶(hù),并且它要調用第二個(gè)對象的某些對象接口的情況下,比較適合用包容模型,第一個(gè)對象包容第二個(gè);如果一個(gè)現成的組件對象所實(shí)現的接口與將要實(shí)現的對象的接口的行為完全完全一致,則采用聚合模型更為合適,當然前提條件是現有的組件對象必須支持聚合特性。
    聚合和包容是COM對象的兩種重用模型,它們互相并不矛盾,因此,我們也可以在一個(gè)對象中同時(shí)使用兩種模型,有的接口通過(guò)包容實(shí)現,有的接口通過(guò)聚合實(shí)現。但現在使用這兩種模型之前,尤其在使用聚合模型之前,需要對模型的細節有清晰的了解,這樣才能夠真正把已有的組件軟件重用起來(lái)。
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
com之代理(proxy)與存根(stub)
[筆記](méi)COM組件初識
COM編程入門(mén)(二)
Filter和Pin是包容還是聚合關(guān)系?怎樣實(shí)現比較好?
COM原理及應用----命名和綁定技術(shù)
COM組件簡(jiǎn)介【轉】
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久