實現計算機軟件系統中的構件動態聚合的方法

            文檔序號:6555475閱讀:272來源:國知局
            專利名稱:實現計算機軟件系統中的構件動態聚合的方法
            技術領域
            本發明涉及計算機軟件技術領域,特別涉及計算機構件化軟件系統領域,具體是指一種實現計算機軟件系統中的構件動態聚合地方法。
            背景技術
            隨著現代構件化計算機軟件技術的進一步發展,CAR(Component Assembly Runtime)構件技術是一種面向構件編程(Component Oriented Programming,簡稱COP)技術,它定義了一套網絡編程時代的構件編程模型和編程規范,規定了一組構件間相互調用的標準,使得二進制構件能夠自描述,能夠在運行時動態鏈接。
            目前,CAR構件技術已在某些先進的嵌入式操作系統上實現,在該嵌入式操作系統的SDK(Software Development Kit)下,用戶很容易編寫出自己的構件。
            CAR構件技術的基礎思想來源于微軟的COM,但它對微軟的COM進行了拓展,并且二者不兼容。CAR構件技術由CAR語言(構件描述語言,描述構件的元數據信息)、CAR編譯器、自動代碼生成工具以及CAR構件基礎庫支持。CAR構件技術體現了網絡編程時代的特性,編程界面簡單。
            在COM里,聚合是一種構件的復用技術,請參閱圖1所示,當構件對象B聚合了構件對象A,那么對于客戶端來說,并不知道有構件對象A的存在,客戶端使用構件對象A的服務完全由構件對象B來傳替,被聚合對象A的生存周期也完全由對象B控制。(對于被聚合的對象我們有時也稱之為內部對象,聚合者則相應稱為外部對象)。
            然而COM里的聚合模型有著比較大的限制,那就是一旦外部對象聚合了內部對象,那么內部對象其行為和生存周期完全由外部對象控制了,在外部對象的生存周期內,內部對象和外部對象再也不能拆卸,另外,COM的聚合方式只能在對象創建時發生,不能隨時隨地的聚合。在現實世界里,一個構件對象往往會隨著環境改變而表現出(或擁有)不同的特征。比如寵物店的貓(構件對象),具有寵物和商品兩方面的特征(aspect)。但貓剛生下來時卻未必是寵物,更不會是商品;而一旦被售出,就不再是商品,但寵物特征卻保留了下來。顯而易見,讓貓進入寵物店就擁有寵物和商品兩方面特征,而離開寵物店后就丟棄商品特征,使用COM的聚合模型是實現不了這種現實模型的,因為COM的聚合模型不是一種隨時聚合、隨時拆卸的動態聚合模型,這樣就制約了現代計算機軟件技術的進一步發展。

            發明內容
            本發明的目的是克服了上述現有技術中的缺點,提供一種能夠根據軟件運行的實際需要動態聚合和動態拆卸、構件對象在不同的運行環境里能夠擁有和去除與運行環境相關的特征、提高構件復用的靈活性,降低程序設計的復雜度、能夠更好地反映描述現實世界模型的實現計算機軟件系統中的構件動態聚合的方法。
            為了實現上述的目的,本發明的實現計算機軟件系統中的構件動態聚合的方法如下
            該實現計算機軟件系統中的構件動態聚合的方法,其主要特點是,所述的方法包括構件動態聚合操作和構件動態拆卸聚合操作,該構件動態聚合操作包括以下步驟
            (1)系統進行初始化操作;
            (2)系統實例化方面構件類模型得到被聚合對象實例;
            (3)系統實例化外部構件得到外部對象實例;
            (4)如果該外部對象實例中不存在被聚合對象實例,則系統將被聚合對象實例的指針傳遞給外部對象實例,外部對象實例保存該指針;否則,系統將被聚合對象實例的指針傳遞給上一層被聚合對象實例,上一層被聚合對象實例保存該指針;
            (5)系統將外部對象實例的指針或者上層被聚合對象實例的指針傳遞給該被聚合對象實例;
            (6)被聚合對象實例保存相應的指針,形成聚合鏈表,并將該被聚合對象實例在系統中所有的引用計數全部加載到外部對象實例;
            (7)完成動態聚合操作;
            該構件動態拆卸聚合操作包括以下步驟
            (1)系統將需要拆卸的被聚合對象實例的對象標識傳遞給所述的外部對象實例;
            (2)該外部對象實例根據該對象標識在聚合鏈表中找出相應的被聚合對象實例的指針;
            (3)該被聚合對象實例在聚合鏈表中進行摘除自身并維持剩余的聚合鏈表的處理;
            (4)被聚合對象實例從外部對象實例中還原其在系統中所有的引用計數;
            (5)完成動態拆卸聚合操作。
            所述的構件動態聚合操作中在步驟(4)之前還包括有以下步驟
            (31)系統進行構件添加到聚合鏈表前的制約處理。
            所述的構件動態聚合操作中在步驟(7)之前還包括有以下步驟
            (61)系統進行構件添加到聚合鏈表后的制約處理。
            所述的構件動態聚合操作中在步驟(7)之后還包括有以下步驟
            (71)系統進行構件聚合完成后的制約處理。
            所述的構件動態拆卸聚合操作中在步驟(3)之后還包括有以下步驟
            (31)系統進行構件從聚合鏈表摘除后的制約處理。
            所述的構件動態拆卸聚合操作中在步驟(5)之后還包括有以下步驟
            (51)系統進行構件拆卸聚合完成后的制約處理。
            所述的方面構件類模型中具有方面接口,該方面接口中包括有接口查詢成員方法QueryInterface、添加引用成員方法AddRef、釋放成員方法Release和聚合成員方法Aggregate。
            所述的被聚合對象實例摘除自身并維持剩余的聚合鏈表的處理包括以下步驟
            (1)該被聚合對象實例將自身保存的下一層被聚合對象實例的指針傳遞給上一層被聚合對象實例;
            (2)上一層被聚合對象實例保存該指針;
            (3)該被聚合對象實例將自身保存的外部對象實例的指針或者上層被聚合對象實例的指針傳遞給下一層被聚合對象實例;
            (4)下一層被聚合對象實例保存該指針。
            采用了該發明的實現計算機軟件系統中的構件動態聚合的方法,由于通過方面構件模型的對象實例與外部構件的對象實例進行交互操作,最終形成了外部構件對象實例內的聚合鏈表結構,不僅實現了動態聚合、動態拆卸的聚合模型,而且突破了COM只能在創建時聚合以及聚合之后不能拆卸的限制,可提高構件的復用度以及構件復用的靈活性;不僅如此,本發明的方法能夠提高構件接口的查詢和執行效率,增強系統運行的性能和穩定性,在構件的復用領域為面向構件編程提供了寬廣的空間,為軟件工廠化提供了一條簡便的途徑;并且提高了軟件的可擴展性,方便了用戶對不同需求的擴展,為構件化軟件系統的進一步發展奠定了堅實的基礎。


            圖1為現有技術中COM組件對象聚合模型示意圖。
            圖2為本發明的方面構件對象模型示意圖。
            圖3為本發明的方面對象實例在非聚合的情況下接口示意圖。
            圖4為本發明的方面對象實例在聚合的情況下接口示意圖。
            圖5為本發明的方面對象實例在聚合的情況下從客戶端角度看聚合的結果的示意圖。
            圖6為本發明的兩個對象聚合后的簡單狀態示意圖。
            圖7為本發明的多個方面對象實例形成聚合鏈表的聚合模型示意圖。
            圖8為本發明的方面對象實例進行動態拆卸聚合的示意圖。
            具體實施例方式
            為了能夠更清楚地理解本發明的技術內容,特舉以下實施例詳細說明。
            該實現計算機軟件系統中的構件動態聚合的方法,其中,所述的方法包括構件動態聚合操作和構件動態拆卸聚合操作,該構件動態聚合操作包括以下步驟
            (1)系統進行初始化操作;
            (2)系統實例化方面構件類模型得到被聚合對象實例;所述的方面構件類模型中具有方面接口,該方面接口中包括有接口查詢成員方法QueryInterface、添加引用成員方法AddRef、釋放成員方法Release和聚合成員方法Aggregate;
            (3)系統實例化外部構件得到外部對象實例;還可以包括有以下步驟
            (31)系統進行構件添加到聚合鏈表前的制約處理。
            (4)如果該外部對象實例中不存在被聚合對象實例,則系統將被聚合對象實例的指針傳遞給外部對象實例,外部對象實例保存該指針;否則,系統將被聚合對象實例的指針傳遞給上一層被聚合對象實例,上一層被聚合對象實例保存該指針;
            (5)系統將外部對象實例的指針或者上層被聚合對象實例的指針傳遞給該被聚合對象實例;
            (6)被聚合對象實例保存相應的指針,形成聚合鏈表,并將該被聚合對象實例在系統中所有的引用計數全部加載到外部對象實例;還可以包括有以下步驟
            (61)系統進行構件添加到聚合鏈表后的制約處理。
            (7)完成動態聚合操作;還可以包括有以下步驟
            (71)系統進行構件聚合完成后的制約處理。
            該構件動態拆卸聚合操作包括以下步驟
            (1)系統將需要拆卸的被聚合對象實例的對象標識傳遞給所述的外部對象實例;
            (2)該外部對象實例根據該對象標識在聚合鏈表中找出相應的被聚合對象實例的指針;
            (3)該被聚合對象實例在聚合鏈表中進行摘除自身并維持剩余的聚合鏈表的處理,該處理包括以下步驟
            (a)該被聚合對象實例將自身保存的下一層被聚合對象實例的指針傳遞給上一層被聚合對象實例;
            (b)上一層被聚合對象實例保存該指針;
            (c)該被聚合對象實例將自身保存的外部對象實例的指針或者上層被聚合對象實例的指針傳遞給下一層被聚合對象實例;
            (d)下一層被聚合對象實例保存該指針;
            還可以包括有以下步驟
            (31)系統進行構件從聚合鏈表摘除后的制約處理。
            (4)被聚合對象實例從外部對象實例中還原其在系統中所有的引用計數;
            (5)完成動態拆卸聚合操作,還可以包括有以下步驟
            (51)系統進行構件拆卸聚合完成后的制約處理。
            在實際使用當中,要實現動態的聚合模型,首先要實現類似于COM的聚合模型,也就是說外部對象要聚合內部對象,內部對象必須是可被聚合的。為此在CAR構件技術引入了方面(aspect)構件對象模型,請參閱圖2所示。
            aspect是一種特殊的構件類實現,aspect對象的特征是可以被其它構件對象聚合,該構件類必須實現IAspect接口,aspect對象就是實現了IAspect接口的構件對象。
            在此附帶說明一下,在COM里所有接口都是繼承IUnknown接口的,在CAR構件體系里,所有接口都是繼承于基接口IObject。IObject接口擴展了IUnknown接口,其定義如下
            interface IObject{ECODE QueryInterface([in]REFIID riid,[out]IObject**ppObject);ULONG AddRef();   ULONG Release();   ECODE Aggregate(  [in]AggregateType type,  [in]IObject*pObject);  }
            其中的ECODE是個32位整形的返回值,類似于微軟公司的HRESULT。
            前三個接口和IUnkown接口基本等價(除了QueryInterface方法的輸出參數為IObject**),但多了個Aggregate方法,這就與COM不兼容了。
            通常情況下,在COM里,可被聚合對象必須實現兩個IUnknown接口,委托IUnknown接口和非委托IUnknown接口。在聚合的情況下,委托IUnknown接口把調用傳給外部對象,在非聚合的情況下委托IUnknown接口把調用傳給非委托IUnknown接口;非委托IUnknown接口是對IUnknown接口的真正實現。
            對于每個aspect構件對象,對IAspect實現是真正意義上的IObject實現,而對IObject接口實現只是進行簡單的轉接。請參閱圖3所示,當aspect構件對象作為一個獨立的構件對象存在時,對IObject的方法調用將會完全轉接到IAspect接口的對應方法上。再請參閱圖4所示,如果aspect對象被其它構件對象聚合,對IObject的方法調用則會被委托給外部對象的IObject接口方法,外部對象保存aspect對象的IAspect接口指針,用于aspect對象實現的接口查找(QueryInterface),這與COM聚合模型的實現非常類似。
            請參閱圖5所示,一旦aspect對象被外部對象聚合了,那么二者就形成了一個構件對象,而在客戶端看來,只知有外部對象的存在,而不知有aspect對象的存在。
            在本發明的方法里的aspect對象也具有普通構件對象所具有的功能,也就是說aspect對象不但可被其他普通構件對象聚合,還可以聚合其他的aspect對象。
            在本發明的方法里定義一個aspect對象是非常簡單的事情,只要如下描述就可以了
            interface IHello
            {
            Hello();
            }
            aspect CHello{
            interface IHello;
            }
            那么CHello構件類就是一個可被聚合的aspect構件類了,被實例化后就是aspect對象。
            到此,系統中已經建立了兩個普通構件的聚合模型,下面要解決的問題就是怎樣達到隨時聚合(也就是動態聚合),并且能夠隨時拆卸聚合(也就是動態拆卸聚合)。首先是進行動態聚合。
            動態聚合就是構件對象隨著執行環境(或者說上下文)的變化,在執行時聚合其他的構件對象。COM里的聚合行為只是發生在組件對象創建之時,如對象B聚合對象A,在創建對象A時,將對象B的IUnknown指針作為CoCreateInstance的第二個參數IA*ia=NULL;HRESULT hr=CoCreateInstance(CLSID_CA,pb,CTX_SAME_DOMAIN,IID_IA,
            (PVOID)&ia);……………
            上面只是一段示例代碼,IA代表對象A實現的接口,IID為IID_IA,CLSID_CA是對象A的CLSID,pb是聚合者對象B的IUnknown接口指針。
            在本發明的方法里,聚合行為的發生是對IObject接口中Aggregate方法的調用。只要兩個對象都被創建出來了,并且滿足了聚合條件,那么聚合行為就可以隨時發生。再看上面的例子,如果我們用m_pOuter表示聚合者對象B的指針(可以是對象B的任意一接口指針),m_pAspect指向被聚合者A的指針(可以是對象A的任意一接口指針),那么下面對Aggregate方法的調用就完成了聚合
            m_pAspect->Aggregate(AggrType_Aggregate,m_pOuter);
            AggregateType類型指定了AggrType_Aggregate,說明函數完成的是聚合行為。
            為了語義上更加明了以及使用上更加簡便,本發明的方法中的構件基礎庫還提供了一個專門用于聚合的API函數
            EZAPI EzAggregate(
            /*[in]*/POBJECT pAggregator,
            /*[in]*/POBJECT pAspect)
            其中EZAPI為API函數調用宏,其定義如下
            #define EZAPI extern“c”unsigned int_stdcall
            這個函數實際上是對上面調用的封裝。pAggregator是指向聚合者的指針,pAspect則指向aspect對象指針。
            無論是上面哪種形式被調用,都會發生如下聚合過程
            1)外部對象有了指向aspect對象的指針(m_pAspect);
            2)被聚合的aspect對象就有了指向外部對象的指針(m_pOuter);
            3)aspect對象保存外部對象指針并將所有的引用計數全部轉嫁到外部對象。
            聚合后兩個對象的狀態請參閱圖6所示。
            上述的過程只是兩個對象的聚合,外部對象只聚合了一個aspect對象,但實際上,往往需要一個對象聚合多個aspect對象,這就是多面聚合。在完成多面聚合時,實現上并沒有多大的變化,就是創建多個aspect對象,多次調用EzAggregate方法使一個對象聚合多個aspect對象。請參閱圖7所示,其中是多面聚合的結果示意圖。
            可以看出,構件對象指向下層被聚合的aspect對象指針(m_pAspect)構成了一個單向鏈表(聚合鏈),而鏈表中每一個aspect對象的m_pOuter指針都指向最外層的外部對象(聚合者)。通過這種方式,QureryInterface調用可以在鏈表中從頭向尾傳遞,而所有aspect對象的引用計數都委托給了最外層的外部對象。這與前面所介紹的兩個對象聚合的情況并沒有多大區別。
            當然,上圖是一種比較理想的聚合情況,在某些情況下,下層aspect對象的m_pOuter指針可能會指向中間的aspect對象,最壞的情況是每一個aspect對象的m_pOuter指針都指向它相鄰的上層對象。雖然這樣也能正確運行,不影響執行的結果,但運行效率卻十分低下。
            通過動態聚合和多面聚合,可以隨時隨地聚合一個或多個aspect對象,接下來就要實現動態拆卸聚合。
            請參閱圖8所示,其中表示了動態拆卸聚合的過程,即從聚合鏈中找到要拆卸的aspect對象指針,然后從聚合鏈里將其剔除。
            動態拆卸聚合也是通過對IObject接口中Aggregate方法的調用完成的。
            m_pAspect->Aggregate(AggrType_Unaggregate,m_pOuter);
            AggregateType類型指定了AggrType_Unaggregate,說明函數完成的是拆卸聚合行為。為了簡便,本發明的方法中的構件庫提供了EzUnaggregate函數來實現動態拆卸聚合
            EZAPI EzUnaggregate(
            /*[in]*/POBJECT pAggregator,
            /*[in]*/REFEZCLSID rAspectClsid)
            pAggregator為外部對象,rAspectClsid為aspect對象構件類的EZCLSID標識,這個函數實際上就是上面調用的封裝,使外部對象動態地拆卸某個已被聚合了的aspect對象,其大致的實現過程如下
            1)外部對象通過要被拆卸的aspect對象標識在聚合鏈里找出相應的aspect對象IAspect接口指針;
            2)與rAspectClsid匹配aspect對象斷開自己并維持剩余的聚合鏈表;
            3)還原引用計數。由于在聚合時aspect對象將引用計數完全轉嫁到了外部對象,所以在拆卸的時候必須還原,還原的過程就是聚合時轉嫁的相反過程。
            現實世界里,構件對象在聚合以及拆卸聚合時往往不是那么隨意,也就是說,聚合完成以及拆卸聚合的完成需要條件。如一只貓要想成為寵物店里的貓,這只貓必須要為人所喜愛,它才能成為寵物店里具有商品價值的貓(也就是貓可聚合寵物和商品兩個特征);相應地,寵物店里的貓要被賣出,至少需要達到一定的價錢,貓才可被人買走(也就是貓拆卸聚合了商品的特征)。為此本發明的方法在構件類實現時為構件的實現者提供一套可重載的虛函數來實現聚合和拆卸聚合時的制約。
            對于本發明方法中的每個構件類(無論是聚合者還是aspect對象),構件的實現者可重載如下幾個函數來實現對該構件類對象在聚合或拆卸聚合時的制約
            virtual CARAPI OnAspectAttaching(POBJECT pAspect);
            virtual CARAPI OnAspectAttached(POBJECT pAspect);
            virtual CARAPI OnAspectDetached(POBJECT pAspect);
            其中CARAPI為宏,其定義如下
            #define CARAPI unsigned int_stdcall
            在聚合aspect對象時,在將aspect對象添加到聚合鏈之前,OnAspectAttaching函數會被觸發,當添加結束OnAspectAttached函數會被觸發。
            在拆卸聚合時,功能是完成從聚合鏈里摘除被拆卸的aspect對象,在該實現完畢的時候會調用OnAspectDetached函數。
            另外,對于aspect對象構件類,不但可重載如上三個虛函數,還可以重載如下兩個虛函數
            virtual CARAPI OnAggregated(POBJECT pOuter);
            virtual CARAPI OnUnaggregated(POBJECT pOuter);
            聚合完成時,OnAggregated會被調用,拆卸聚合完成時,OnUnaggregated會被調用。
            下面以一個簡化了的游戲來示例本發明的構件的動態聚合的方法。
            在一些游戲里,游戲角色(Role)在游戲場景里揀到什么樣的工具就可以發揮此工具的特性,比如角色見到一把槍,就可以向敵人開火,揀到劍就能施展劍術等等,但是當角色扔掉工具后就不能發揮工具的特性了,沒有槍就不能開槍,沒有劍就不能施展劍術。在這個例子里我們只考慮一種很簡單的情況,那就是角色(Role)揀到了劍就能施展劍術(SwordPlay),角色扔掉了劍就不能施展劍術。我們將角色和劍術分別設計為構件類CRole和CSwordPlay,這樣可以減輕開發角色的負擔。可以描述這兩個構件類如下
              module  {   interface IActionControl{   GetSword();   AbandonSword();   }   interface ISwordFunctionality{  split();  thrust();  chop();   }   class CRole{  interface IActionControl;   }   aspect CSwordPlay{  interface ISwordFunctionality;   }  }
            其中的module描述了表示一個構件模塊。我們讓CRole和CSwordPlay分別實現IActionControl和ISwordFunctionality接口。CSwordPlay是一個aspect構件類,當Role揀到劍的時候會聚合CSwordPlay對象的ISwordFunctionality接口,扔掉劍的時候會拆卸聚合ISwordFunctionalitv接口。
            上面的描述將其置于一個名為gamesam.car文件里,使用特定的編譯器以及自動代碼生成工具會生成構件的實現,而用戶只需關心自己定義的接口函數的實現,為此會生成CRole和CSwordPlay對各自接口函數的空實現,用戶只要填入我們自己的代碼就可以了,下面分別是這兩個類的cpp以及h文件
              CRole.cpp  #include″CRole.h″  #include″_CRole.cpp″  DECLARE_CLASSOBJECT(CRole)  ECODE CRole∷GetSword()  {   m_bSwordPlay=TRUE;   return NOERROR;  }  ECODE CRole∷AbandonSword()  {   m_bSwordPlay=FALSE;   return NOERROR;  }  ECODE CRole∷OnAspectAttaching(POBJECT pObj)  {   if(!m_bSwordPlay)return E_FAIL;   return NOERROR;  }
            其中的_CRole.cpp是生成的有關構件對象底層實現代碼,普通構件編寫者不用關心,在此不做介紹,下面的_CSwordPaly也類似。CAR構件還可以為每個構件類自動生成類產對象,DECLARE_CLASSOBJECT(CRole)宏就是為CRole生成類產對象,下面的DECLARE_CLASSOBJECT(CSwordPlay)是為CSwordPlay生成類產對象,再次只是簡單說明一下)
            CRole.h  #ifndef_CROLE_H_  #define_CROLE_H_  #include″_CRole.h″  class CRolepublic_CRole  {  public   CARAPI GetSword();   CARAPI AbandonSword();   CARAPI OnAspectAttaching(POBJECT pAspect);  private   //TODO在這里添加用戶自己的私有成員變量   BOOLm_bSwordPlay;  };  #endif//_CROLE_H
            對于CRole,增加了聚合時的制約,在聚合時如果Role已經得到劍了,那么聚合CSwordPlay對象可以成功,若還沒有得到劍就不能聚合CSwordPlay對象。
              CSwordPlay.cpp  #include″CSwordPlay.h″  #include″_CSwordPlay.cpp″  #include<stdio.h>  DECLARE_CLASSOBJECT(CSwordPlay)  ECODE CSwordPlay∷split()  {   printf(″\nsplit!\n″);   return NOERROR;  }  ECODE CSwordPlay∷thrust()  {   printf(″\nthrust!\n″);   return NOERROR;  }  ECODE CSwordPlay∷chop()  {   printf(″\nchop!\n″);   return NOERROR;  }  CSwordPlay.h  #ifndef_CSWORDPLAY_H_  #define_CSWORDPLAY_H_  #include″_CSwordPlay.h″  class CSwordPlaypublic_CSwordPlay  {  public  CARAPI split();  CARAPI thrust();  CARAPI chop();  private  //TODOAdd your private member variables here.  };  #endif//_CSWORDPLAY_H_
            對于類CSwordPlay這里只是簡單地打印了劍的幾種行為。
            下面就是客戶端的程序了
            #include<stdio.h>  ∥引用gamesam.dll  $using gamesam.dll;  int_cdecl main()  {  ECODE ec;  IActionControl*pActionControl=NULL;<!-- SIPO <DP n="11"> --><dp n="d11"/>ISwordFunctionality*pSword=NULL;IObject*pSwordPlay=NULL;//創建Role對象,得到IActionControl指針pActionControlec=EzCreateObject(CLSID_CRole,CTX_SAME_DOMAIN,IID_IActionControl,(POBJECT*)&amp;pActionControl);if(FAILED(ec))goto ErrorExit;//創建SwordPlay對象,得到其IObject指針pSwordPlayec=EzCreateInstance(  CLSID_CSwordPlay,  CTX_SAME_DOMAIN,  IID_IObject,  (POBJECT*)&amp;pSwordPlay);   if(FAILED(ec))goto ErrorExit;   //Role得到劍  pActionControl->GetSword();   //Role得到了劍,可以施展劍術了,于是聚合SwordPlay對象   ec=EzAggregate((POBJECT)pActionControl,pSwordPlay);   if(FAILED(ec)){   goto ErrorExit;   }   else{  //Role聚合SwordPlay對象成功,從Role對象里得到ISwordFunctionality指針pSword  ec=pActionControl->QueryInterface(IID_ISwordFunctionality,(POBJECT*)&amp;pSword);  if(FAILED(ec))goto ErrorExit;  }  //Role施展劍術,使用劍的功能  pSword->split();  pSword->thrust();  pSword->chop();  pSword->Release();  //Role扔掉劍  pActionControl->AbandonSword();  //Role拆卸聚合SwordPlay對象,Role不能使用劍術  ec=EzUnaggregate((POBJECT)pActionControl,CLSID_CSwordPlay);  if(FAILED(ec))goto ErrorExit;  //Role已經扔掉劍再次想擁有劍術,于是聚合SwordPlay對象  ec=EzAggregate((POBJECT)pActionControl,pSwordPlay);  if(FAILED(ec)){  //由于Role已經扔掉劍,所以不能施展劍術,所以不能聚合//SwordPlay對象,所以從  //Role對象里查詢不到ISwordFunctionality接口   ec=pActionControl->QueryInterface(IID_ISwordFunctionality,(POBJECT*)&amp;pSword);   if(FAILED(ec)){<!-- SIPO <DP n="12"> --><dp n="d12"/>   printf(″No sword,No swordplay!\n″);   }   }   if(pActionControl)pActionControl->Release();   if(pSwotdPlay)pSwordPlay->Release();   if(pSword)pSword->Release();   printf(″Game over!\n″);   return 0;  ErrorExit   if(pActionControl)pActionControl->Release();   if(pSwordPlay)pSwordPlay->Release();   if(pSword)pSword->Release();   printf(″Exit with error!\n″);   return 1;  }
            上面所列出的源代碼在本發明的手機嵌入式操作系統平臺下編譯開發的,其運行結果如下
            split!
            thrust!
            chop!
            No sword,No swordplay!
            Game over!
            結果與預期的完全相同。
            采用了上述的實現計算機軟件系統中的構件動態聚合的方法,由于通過方面構件模型的對象實例與外部構件的對象實例進行交互操作,最終形成了外部構件對象實例內的聚合鏈表結構,不僅實現了動態聚合、動態拆卸的聚合模型,而且突破了COM只能在創建時聚合以及聚合之后不能拆卸的限制,可提高構件的復用度以及構件復用的靈活性;不僅如此,本發明的方法能夠提高構件接口的查詢和執行效率,增強系統運行的性能和穩定性,在構件的復用領域為面向構件編程提供了寬廣的空間,為軟件工廠化提供了一條簡便的途徑;并且提高了軟件的可擴展性,方便了用戶對不同需求的擴展,為構件化軟件系統的進一步發展奠定了堅實的基礎。
            權利要求
            1、一種實現計算機軟件系統中的構件動態聚合的方法,其特征在于,所述的方法包括構件動態聚合操作和構件動態拆卸聚合操作,該構件動態聚合操作包括以下步驟
            (1)系統進行初始化操作;
            (2)系統實例化方面構件類模型得到被聚合對象實例;
            (3)系統實例化外部構件得到外部對象實例;
            (4)如果該外部對象實例中不存在被聚合對象實例,則系統將被聚合對象實例的指針傳遞給外部對象實例,外部對象實例保存該指針;否則,系統將被聚合對象實例的指針傳遞給上一層被聚合對象實例,上一層被聚合對象實例保存該指針;
            (5)系統將外部對象實例的指針或者上層被聚合對象實例的指針傳遞給該被聚合對象實例;
            (6)被聚合對象實例保存相應的指針,形成聚合鏈表,并將該被聚合對象實例在系統中所有的引用計數全部加載到外部對象實例;
            (7)完成動態聚合操作;
            該構件動態拆卸聚合操作包括以下步驟
            (1)系統將需要拆卸的被聚合對象實例的對象標識傳遞給所述的外部對象實例;
            (2)該外部對象實例根據該對象標識在聚合鏈表中找出相應的被聚合對象實例的指針;
            (3)該被聚合對象實例在聚合鏈表中進行摘除自身并維持剩余的聚合鏈表的處理;
            (4)被聚合對象實例從外部對象實例中還原其在系統中所有的引用計數;
            (5)完成動態拆卸聚合操作。
            2、根據權利要求1所述的實現計算機軟件系統中的構件動態聚合的方法,其特征在于,所述的構件動態聚合操作中在步驟(4)之前還包括有以下步驟
            (31)系統進行構件添加到聚合鏈表前的制約處理。
            3、根據權利要求1所述的實現計算機軟件系統中的構件動態聚合的方法,其特征在于,所述的構件動態聚合操作中在步驟(7)之前還包括有以下步驟
            (61)系統進行構件添加到聚合鏈表后的制約處理。
            4、根據權利要求1所述的實現計算機軟件系統中的構件動態聚合的方法,其特征在于,所述的構件動態聚合操作中在步驟(7)之后還包括有以下步驟
            (71)系統進行構件聚合完成后的制約處理。
            5、根據權利要求1所述的實現計算機軟件系統中的構件動態聚合的方法,其特征在于,所述的構件動態拆卸聚合操作中在步驟(3)之后還包括有以下步驟
            (31)系統進行構件從聚合鏈表摘除后的制約處理。
            6、根據權利要求1所述的實現計算機軟件系統中的構件動態聚合的方法,其特征在于,所述的構件動態拆卸聚合操作中在步驟(5)之后還包括有以下步驟
            (51)系統進行構件拆卸聚合完成后的制約處理。
            7、根據權利要求1至6中任一項所述的實現計算機軟件系統中的構件動態聚合的方法,其特征在于,所述的方面構件類模型中具有方面接口,該方面接口中包括有接口查詢成員方法QueryInterface、添加引用成員方法AddRef、釋放成員方法Release和聚合成員方法Aggregate。
            8、根據權利要求1至6中任一項所述的實現計算機軟件系統中的構件動態聚合的方法,其特征在于,所述的被聚合對象實例摘除自身并維持剩余的聚合鏈表的處理包括以下步驟
            (1)該被聚合對象實例將自身保存的下一層被聚合對象實例的指針傳遞給上一層被聚合對象實例;
            (2)上一層被聚合對象實例保存該指針;
            (3)該被聚合對象實例將自身保存的外部對象實例的指針或者上層被聚合對象實例的指針傳遞給下一層被聚合對象實例;
            (4)下一層被聚合對象實例保存該指針。
            全文摘要
            本發明涉及一種實現計算機軟件系統中的構件動態聚合的方法,其中包括聚合操作和拆卸操作,聚合操作包括分別實例化方面構件和外部構件得到被聚合對象和外部對象、外部對象保存或上一層被聚合對象保存被聚合對象指針、被聚合對象保存外部對象指針或上層被聚合對象指針形成聚合鏈表并將所有引用計數加載到外部對象,拆卸聚合操作包括外部對象根據需拆卸被聚合對象標識在聚合鏈表中找出相應的對象指針、在聚合鏈表中進行摘除并維持剩余的聚合鏈表、還原其在系統中所有的引用計數。采用該種實現計算機軟件系統中的構件動態聚合的方法,提高了構件復用度和復用靈活性,提高了構件接口的查詢和執行效率,增強系統運行的性能和穩定性。
            文檔編號G06F9/44GK1851643SQ20061002712
            公開日2006年10月25日 申請日期2006年5月30日 優先權日2006年5月30日
            發明者蘇翼鵬, 陳榕, 黃凱峰 申請人:上海科泰世紀科技有限公司
            網友詢問留言 已有0條留言
            • 還沒有人留言評論。精彩留言會獲得點贊!
            1
            婷婷六月激情在线综合激情,亚洲国产大片,久久中文字幕综合婷婷,精品久久久久久中文字幕,亚洲一区二区三区高清不卡,99国产精品热久久久久久夜夜嗨 ,欧美日韩亚洲综合在线一区二区,99国产精品电影,伊人精品线视天天综合,精品伊人久久久大香线蕉欧美
            亚洲精品1区 国产成人一级 91精品国产欧美一区二区 亚洲精品乱码久久久久久下载 国产精品久久久久久久伊一 九色国产 国产精品九九视频 伊人久久成人爱综合网 欧美日韩亚洲区久久综合 欧美日本一道免费一区三区 夜夜爽一区二区三区精品 欧美日韩高清一区二区三区 国产成人av在线 国产精品对白交换绿帽视频 国产视频亚洲 国产在线欧美精品 国产精品综合网 国产日韩精品欧美一区色 国产日韩精品欧美一区喷 欧美日韩在线观看区一二 国产区精品 欧美视频日韩视频 中文字幕天天躁日日躁狠狠躁97 视频一二三区 欧美高清在线精品一区二区不卡 国产精品揄拍一区二区久久 99久久综合狠狠综合久久aⅴ 亚洲乱码视频在线观看 日韩在线第二页 亚洲精品无码专区在线播放 成人亚洲网站www在线观看 欧美三级一区二区 99久久精品免费看国产高清 91麻豆国产在线观看 最新日韩欧美不卡一二三区 成人在线观看不卡 日韩国产在线 在线亚洲精品 亚洲午夜久久久久中文字幕 国产精品成人久久久久久久 精品国产一区二区在线观看 欧美精品国产一区二区三区 中文在线播放 亚洲第一页在线视频 国产午夜精品福利久久 九色国产 精品国产九九 国产永久视频 久久精品人人做人人综合试看 国产一区二区三区免费观看 亚洲精品国产电影 9999热视频 国产精品资源在线 麻豆久久婷婷国产综合五月 国产精品免费一级在线观看 亚洲国产一区二区三区青草影视 中文在线播放 国产成人综合在线 国产在线观看色 国产亚洲三级 国产片一区二区三区 久久99精品久久久久久牛牛影视 亚洲欧美日韩国产 四虎永久免费网站 国产一毛片 国产精品视频在 九九热在线精品 99精品福利视频 色婷婷色99国产综合精品 97成人精品视频在线播放 精品久久久久久中文字幕 亚洲欧美一区二区三区孕妇 亚洲欧美成人网 日韩高清在线二区 国产尤物在线观看 在线不卡一区二区 91网站在线看 韩国精品福利一区二区 欧美日韩国产成人精品 99热精品久久 国产精品免费视频一区 高清视频一区 精品九九久久 欧美日韩在线观看免费 91欧美激情一区二区三区成人 99福利视频 亚洲国产精品91 久热国产在线 精品久久久久久中文字幕女 国产精品久久久久久久久99热 成人自拍视频网 国产精品视频久久久久久 久久影院国产 国产玖玖在线观看 99精品在线免费 亚洲欧美一区二区三区导航 久久久久久久综合 国产欧美日韩精品高清二区综合区 国产精品视频自拍 亚洲一级片免费 久久久久久九九 国产欧美自拍视频 视频一区二区在线观看 欧美日韩一区二区三区久久 中文在线亚洲 伊人热人久久中文字幕 日韩欧美亚洲国产一区二区三区 欧美亚洲国产成人高清在线 欧美日韩国产码高清综合人成 国产性大片免费播放网站 亚洲午夜综合网 91精品久久一区二区三区 国产无套在线播放 国产精品视频网站 国产成人亚洲精品老王 91在线网站 国产视频97 欧美黑人欧美精品刺激 国产一区二区三区免费在线视频 久久久国产精品免费看 99re6久精品国产首页 久久精品91 国产成人一级 国产成人精品曰本亚洲 日本福利在线观看 伊人成综合网 久久综合一本 国产综合久久久久久 久久精品成人免费看 久久福利 91精品国产91久久久久久麻豆 亚洲精品成人在线 亚洲伊人久久精品 欧美日本二区 国产永久视频 国产一区二 一区二区福利 国产一毛片 亚洲精品1区 毛片一区二区三区 伊人久久大香线蕉综合影 国产欧美在线观看一区 亚洲国产欧洲综合997久久 国产一区二区免费视频 国产91精品对白露脸全集观看 久久亚洲国产伦理 欧美成人伊人久久综合网 亚洲性久久久影院 久久99国产精一区二区三区! 91精品国产欧美一区二区 欧美日韩亚洲区久久综合 日韩精品一二三区 久久久夜色精品国产噜噜 国产在线精品福利91香蕉 久久久久久久亚洲精品 97se色综合一区二区二区 91国语精品自产拍在线观看性色 91久久国产综合精品女同我 日韩中文字幕a 国产成人亚洲日本精品 久久国产精品-国产精品 久久国产经典视频 久久国产精品伦理 亚洲第一页在线视频 国产精品久久久久三级 日韩毛片网 久久免费高清视频 麻豆国产在线观看一区二区 91麻豆国产福利在线观看 国产成人精品男人的天堂538 一区二区三区中文字幕 免费在线视频一区 欧美日韩国产成人精品 国产综合网站 国产资源免费观看 亚洲精品亚洲人成在线播放 精品久久久久久中文字幕专区 亚洲人成人毛片无遮挡 国产一起色一起爱 国产香蕉精品视频在 九九热免费观看 日韩亚洲欧美一区 九九热精品在线观看 精品久久久久久中文字幕专区 亚洲欧美自拍偷拍 国产精品每日更新 久久久久国产一级毛片高清板 久久天天躁狠狠躁夜夜中文字幕 久久精品片 日韩在线毛片 国产成人精品本亚洲 国产成人精品一区二区三区 九九热在线观看 国产r级在线观看 国产欧美日韩精品高清二区综合区 韩国电影一区二区 国产精品毛片va一区二区三区 五月婷婷伊人网 久久一区二区三区免费 一本色道久久综合狠狠躁篇 亚洲综合色站 国产尤物在线观看 亚洲一区亚洲二区 免费在线视频一区 欧洲精品视频在线观看 日韩中文字幕a 中文字幕日本在线mv视频精品 91精品在线免费视频 精品国产免费人成在线观看 精品a级片 中文字幕日本在线mv视频精品 日韩在线精品视频 婷婷丁香色 91精品国产高清久久久久 国产成人精品日本亚洲直接 五月综合视频 欧美日韩在线亚洲国产人 精液呈暗黄色 亚洲乱码一区 久久精品中文字幕不卡一二区 亚洲天堂精品在线 激情婷婷综合 国产免费久久精品久久久 国产精品亚洲二区在线 久久免费播放视频 五月婷婷丁香综合 在线亚洲欧美日韩 久久免费精品高清麻豆 精品久久久久久中文字幕 亚洲一区网站 国产精品福利社 日韩中文字幕免费 亚洲综合丝袜 91精品在线播放 国产精品18 亚洲日日夜夜 伊人久久大香线蕉综合影 亚洲精品中文字幕乱码影院 亚洲一区二区黄色 亚洲第一页在线视频 一区二区在线观看视频 国产成人福利精品视频 亚洲高清二区 国内成人免费视频 精品亚洲性xxx久久久 国产精品合集一区二区三区 97av免费视频 国产一起色一起爱 国产区久久 国产资源免费观看 99精品视频免费 国产成人一级 国产精品九九免费视频 欧美91精品久久久久网免费 99热国产免费 久久精品色 98精品国产综合久久 久久精品播放 中文字幕视频免费 国产欧美日韩一区二区三区在线 精品久久蜜桃 国产小视频精品 一本色道久久综合狠狠躁篇 91在线免费观看 亚洲精品区 伊人成综合网 伊人热人久久中文字幕 伊人黄色片 99国产精品热久久久久久夜夜嗨 久久免费精品视频 亚洲一区二区三区高清不卡 久久久久国产一级毛片高清板 国产片一区二区三区 久久狠狠干 99久久婷婷国产综合精品电影 国产99区 国产精品成人久久久久 久久狠狠干 青青国产在线观看 亚洲高清国产拍精品影院 国产精品一区二区av 九九热在线免费视频 伊人久久国产 国产精品久久久久久久久久一区 在线观看免费视频一区 国产精品自在在线午夜区app 国产精品综合色区在线观看 国产毛片久久久久久国产毛片 97国产免费全部免费观看 国产精品每日更新 国产尤物视频在线 九九视频这里只有精品99 一本一道久久a久久精品综合 久久综合给会久久狠狠狠 国产成人精品男人的天堂538 欧美一区二区高清 毛片一区二区三区 国产欧美日韩在线观看一区二区三区 在线国产二区 欧美不卡网 91在线精品中文字幕 在线国产福利 国内精品91久久久久 91亚洲福利 日韩欧美国产中文字幕 91久久精品国产性色也91久久 亚洲性久久久影院 欧美精品1区 国产热re99久久6国产精品 九九热免费观看 国产精品欧美日韩 久久久久国产一级毛片高清板 久久国产经典视频 日韩欧美亚洲国产一区二区三区 欧美亚洲综合另类在线观看 国产精品自在在线午夜区app 97中文字幕在线观看 视频一二三区 精品国产一区在线观看 国产欧美日韩在线一区二区不卡 欧美一区二三区 伊人成人在线观看 国内精品91久久久久 97在线亚洲 国产在线不卡一区 久久久全免费全集一级全黄片 国产精品v欧美精品∨日韩 亚洲毛片网站 在线不卡一区二区 99re热在线视频 久久激情网 国产毛片一区二区三区精品 久久亚洲综合色 中文字幕视频免费 国产视频亚洲 婷婷伊人久久 国产一区二区免费播放 久久99国产精品成人欧美 99国产在线视频 国产成人免费视频精品一区二区 国产不卡一区二区三区免费视 国产码欧美日韩高清综合一区 久久精品国产主播一区二区 国产一区电影 久久精品国产夜色 国产精品国产三级国产 日韩一区二区三区在线 久久97久久97精品免视看 久久国产免费一区二区三区 伊人久久大香线蕉综合电影网 99re6久精品国产首页 久久激情网 亚洲成人高清在线 国产精品网址 国产成人精品男人的天堂538 香蕉国产综合久久猫咪 国产专区中文字幕 91麻豆精品国产高清在线 久久国产经典视频 国产精品成人va在线观看 国产精品爱啪在线线免费观看 日本精品久久久久久久久免费 亚洲综合一区二区三区 久久五月网 精品国产网红福利在线观看 久久综合亚洲伊人色 亚洲国产精品久久久久久网站 在线日韩国产 99国产精品热久久久久久夜夜嗨 国产综合精品在线 国产区福利 精品亚洲综合久久中文字幕 国产制服丝袜在线 毛片在线播放网站 在线观看免费视频一区 国产精品久久久精品三级 亚洲国产电影在线观看 最新日韩欧美不卡一二三区 狠狠综合久久综合鬼色 日本精品1在线区 国产日韩一区二区三区在线播放 欧美日韩精品在线播放 亚洲欧美日韩国产一区二区三区精品 久久综合久久网 婷婷六月激情在线综合激情 亚洲乱码一区 国产专区91 97av视频在线观看 精品久久久久久中文字幕 久久五月视频 国产成人福利精品视频 国产精品网址 中文字幕视频在线 精品一区二区三区免费视频 伊人手机在线视频 亚洲精品中文字幕乱码 国产在线视频www色 色噜噜国产精品视频一区二区 精品亚洲成a人在线观看 国产香蕉尹人综合在线 成人免费一区二区三区在线观看 国产不卡一区二区三区免费视 欧美精品久久天天躁 国产专区中文字幕 久久精品国产免费中文 久久精品国产免费一区 久久无码精品一区二区三区 国产欧美另类久久久精品免费 欧美精品久久天天躁 亚洲精品在线视频 国产视频91在线 91精品福利一区二区三区野战 日韩中文字幕免费 国产精品99一区二区三区 欧美成人高清性色生活 国产精品系列在线观看 亚洲国产福利精品一区二区 国产成人在线小视频 国产精品久久久久免费 99re热在线视频 久久久久久久综合 一区二区国产在线播放 成人国产在线视频 亚洲精品乱码久久久久 欧美日韩一区二区综合 精品久久久久免费极品大片 中文字幕视频二区 激情粉嫩精品国产尤物 国产成人精品一区二区视频 久久精品中文字幕首页 亚洲高清在线 国产精品亚洲一区二区三区 伊人久久艹 中文在线亚洲 国产精品一区二区在线播放 国产精品九九免费视频 亚洲二区在线播放 亚洲狠狠婷婷综合久久久久网站 亚洲欧美日韩网站 日韩成人精品 亚洲国产一区二区三区青草影视 91精品国产福利在线观看 国产精品久久久久久久久99热 国产一区二区精品尤物 久碰香蕉精品视频在线观看 亚洲日日夜夜 在线不卡一区二区 国产午夜亚洲精品 九九热在线视频观看这里只有精品 伊人手机在线视频 91免费国产精品 日韩欧美中字 91精品国产91久久久久 国产全黄三级播放 视频一区二区三区免费观看 国产开裆丝袜高跟在线观看 国产成人欧美 激情综合丝袜美女一区二区 国产成人亚洲综合无 欧美精品一区二区三区免费观看 欧美亚洲国产日韩 日韩亚州 国产欧美日韩精品高清二区综合区 亚洲午夜国产片在线观看 精品久久久久久中文字幕 欧美精品1区 久久伊人久久亚洲综合 亚洲欧美日韩精品 国产成人精品久久亚洲高清不卡 久久福利影视 国产精品99精品久久免费 久久久久免费精品视频 国产日产亚洲精品 亚洲国产午夜电影在线入口 精品无码一区在线观看 午夜国产精品视频 亚洲一级片免费 伊人久久大香线蕉综合影 国产精品久久影院 久碰香蕉精品视频在线观看 www.欧美精品 在线小视频国产 亚洲国产天堂久久综合图区 欧美一区二区三区不卡 日韩美女福利视频 九九精品免视频国产成人 不卡国产00高中生在线视频 亚洲第一页在线视频 欧美日韩在线播放成人 99re视频这里只有精品 国产精品91在线 精品乱码一区二区三区在线 国产区久久 91麻豆精品国产自产在线观看一区 日韩精品成人在线 九九热在线观看 国产精品久久不卡日韩美女 欧美一区二区三区综合色视频 欧美精品免费一区欧美久久优播 国产精品网址 国产专区中文字幕 国产精品欧美亚洲韩国日本久久 日韩美香港a一级毛片 久久精品123 欧美一区二区三区免费看 99r在线视频 亚洲精品国产字幕久久vr 国产综合激情在线亚洲第一页 91免费国产精品 日韩免费小视频 亚洲国产精品综合一区在线 国产亚洲第一伦理第一区 在线亚洲精品 国产精品一区二区制服丝袜 国产在线成人精品 九九精品免视频国产成人 亚洲国产网 欧美日韩亚洲一区二区三区在线观看 在线亚洲精品 欧美一区二区三区高清视频 国产成人精品男人的天堂538 欧美日韩在线观看区一二 亚洲欧美一区二区久久 久久精品中文字幕首页 日本高清www午夜视频 久久精品国产免费 久久999精品 亚洲国产精品欧美综合 88国产精品视频一区二区三区 91久久偷偷做嫩草影院免费看 国产精品夜色视频一区二区 欧美日韩导航 国产成人啪精品午夜在线播放 一区二区视频在线免费观看 99久久精品国产自免费 精液呈暗黄色 久久99国产精品 日本精品久久久久久久久免费 精品国产97在线观看 99re视频这里只有精品 国产视频91在线 999av视频 亚洲美女视频一区二区三区 久久97久久97精品免视看 亚洲国产成人久久三区 99久久亚洲国产高清观看 日韩毛片在线视频 综合激情在线 91福利一区二区在线观看 一区二区视频在线免费观看 激情粉嫩精品国产尤物 国产成人精品曰本亚洲78 国产成人精品本亚洲 国产精品成人免费视频 国产成人啪精品视频免费软件 久久精品国产亚洲妲己影院 国产精品成人久久久久久久 久久大香线蕉综合爱 欧美一区二区三区高清视频 99热国产免费 在线观看欧美国产 91精品视频在线播放 国产精品福利社 欧美精品一区二区三区免费观看 国产一区二区免费视频 国产午夜精品一区二区 精品视频在线观看97 91精品福利久久久 国产一区福利 国产综合激情在线亚洲第一页 国产精品久久久久久久久久久不卡 九色国产 在线日韩国产 黄网在线观看 亚洲一区小说区中文字幕 中文字幕丝袜 日本二区在线观看 日本国产一区在线观看 欧美日韩一区二区三区久久 欧美精品亚洲精品日韩专 国产日产亚洲精品 久久综合九色综合欧美播 亚洲国产欧美无圣光一区 欧美视频区 亚洲乱码视频在线观看 久久无码精品一区二区三区 九九热精品免费视频 久久99精品久久久久久牛牛影视 国产精品成久久久久三级 国产一区福利 午夜国产精品视频 日本二区在线观看 99久久网站 国产亚洲天堂 精品国产一区二区三区不卡 亚洲国产日韩在线一区 国产成人综合在线观看网站 久久免费高清视频 欧美在线导航 午夜精品久久久久久99热7777 欧美久久综合网 国产小视频精品 国产尤物在线观看 亚洲国产精品综合一区在线 欧美一区二区三区不卡视频 欧美黑人欧美精品刺激 日本福利在线观看 久久国产偷 国产手机精品一区二区 国产热re99久久6国产精品 国产高清啪啪 欧美亚洲国产成人高清在线 国产在线第三页 亚洲综合一区二区三区 99r在线视频 99精品久久久久久久婷婷 国产精品乱码免费一区二区 国产在线精品福利91香蕉 国产尤物视频在线 五月婷婷亚洲 中文字幕久久综合伊人 亚洲精品一级毛片 99国产精品电影 在线视频第一页 久久99国产精品成人欧美 国产白白视频在线观看2 成人精品一区二区www 亚洲成人网在线观看 麻豆91在线视频 色综合合久久天天综合绕视看 久久精品国产免费高清 国产不卡一区二区三区免费视 欧美国产中文 99精品欧美 九九在线精品 国产中文字幕在线免费观看 国产一区中文字幕在线观看 国产成人一级 国产精品一区二区制服丝袜 国产一起色一起爱 亚洲精品成人在线 亚洲欧美精品在线 国产欧美自拍视频 99精品久久久久久久婷婷 久99视频 国产热re99久久6国产精品 视频一区亚洲 国产精品视频分类 国产精品成在线观看 99re6久精品国产首页 亚洲在成人网在线看 亚洲国产日韩在线一区 久久国产三级 日韩国产欧美 欧美在线一区二区三区 国产精品美女一级在线观看 成人午夜免费福利视频 亚洲天堂精品在线 91精品国产手机 欧美日韩视频在线播放 狠狠综合久久综合鬼色 九一色视频 青青视频国产 亚洲欧美自拍一区 中文字幕天天躁日日躁狠狠躁97 日韩免费大片 996热视频 伊人成综合网 亚洲天堂欧美 日韩精品亚洲人成在线观看 久久综合给会久久狠狠狠 日韩精品亚洲人成在线观看 日韩国产欧美 亚洲成aⅴ人片在线影院八 亚洲精品1区 99久久精品免费 国产精品高清在线观看 国产精品久久久免费视频 在线亚洲欧美日韩 91在线看视频 国产精品96久久久久久久 欧美日韩国产成人精品 91在线亚洲 热久久亚洲 国产精品美女免费视频观看 日韩在线毛片 亚洲永久免费视频 九九免费在线视频 亚洲一区网站 日本高清二区视频久二区 精品国产美女福利在线 伊人久久艹 国产精品久久久久三级 欧美成人精品第一区二区三区 99久久精品国产自免费 在线观看日韩一区 国产中文字幕一区 成人免费午夜视频 欧美日韩另类在线 久久99国产精品成人欧美 色婷婷中文网 久久天天躁夜夜躁狠狠躁2020 欧美成人伊人久久综合网 国产精品福利资源在线 国产伦精品一区二区三区高清 国产精品亚洲综合色区韩国 亚洲一区欧美日韩 色综合视频 国语自产精品视频在线区 国产高清a 成人国内精品久久久久影 国产在线精品香蕉综合网一区 国产不卡在线看 国产成人精品精品欧美 国产欧美日韩综合精品一区二区三区 韩国电影一区二区 国产在线视频www色 91中文字幕在线一区 国产人成午夜免视频网站 亚洲综合一区二区三区 色综合视频一区二区观看 久久五月网 九九热精品在线观看 国产一区二区三区国产精品 99久热re在线精品996热视频 亚洲国产网 在线视频亚洲一区 日韩字幕一中文在线综合 国产高清一级毛片在线不卡 精品国产色在线 国产高清视频一区二区 精品日本久久久久久久久久 亚洲国产午夜精品乱码 成人免费国产gav视频在线 日韩欧美一区二区在线观看 欧美曰批人成在线观看 韩国电影一区二区 99re这里只有精品6 日韩精品一区二区三区视频 99re6久精品国产首页 亚洲欧美一区二区三区导航 欧美色图一区二区三区 午夜精品视频在线观看 欧美激情在线观看一区二区三区 亚洲热在线 成人国产精品一区二区网站 亚洲一级毛片在线播放 亚洲一区小说区中文字幕 亚洲午夜久久久久影院 国产自产v一区二区三区c 国产精品视频免费 久久调教视频 国产成人91激情在线播放 国产精品欧美亚洲韩国日本久久 久久亚洲日本不卡一区二区 91中文字幕网 成人国产在线视频 国产视频91在线 欧美成人精品第一区二区三区 国产精品福利在线 久久综合九色综合精品 欧美一区二区三区精品 久久国产综合尤物免费观看 久久99青青久久99久久 日韩精品免费 久久国产精品999 91亚洲视频在线观看 国产精品igao视频 色综合区 在线亚洲欧国产精品专区 国产一区二区三区在线观看视频 亚洲精品成人在线 一区二区国产在线播放 中文在线亚洲 亚洲精品第一国产综合野 国产一区二区精品久久 一区二区三区四区精品视频 99热精品久久 中文字幕视频二区 国产成人精品男人的天堂538 99精品影视 美女福利视频一区二区 久久午夜夜伦伦鲁鲁片 综合久久久久久久综合网 国产精品国产欧美综合一区 国产99视频在线观看 国产亚洲女在线精品 婷婷影院在线综合免费视频 国产亚洲3p一区二区三区 91成人爽a毛片一区二区 亚洲一区二区高清 国产欧美亚洲精品第二区首页 欧美日韩导航 亚洲高清二区 欧美激情观看一区二区久久 日韩毛片在线播放 亚洲欧美日韩高清中文在线 亚洲日本在线播放 国产精品一区二区制服丝袜 精品国产一区二区三区不卡 国产不卡在线看 国产欧美网站 四虎永久在线观看视频精品 国产黄色片在线观看 夜夜综合 一本色道久久综合狠狠躁篇 欧美亚洲综合另类在线观看 国产91在线看 伊人久久国产 欧美一区二区在线观看免费网站 国产精品久久久久三级 久久福利 日韩中文字幕a 亚洲午夜久久久久影院 91在线高清视频 国产亚洲一区二区三区啪 久久人精品 国产精品亚洲午夜一区二区三区 综合久久久久久 久久伊人一区二区三区四区 国产综合久久久久久 日韩一区精品视频在线看 国产精品日韩欧美制服 日本精品1在线区 99re视频 无码av免费一区二区三区试看 国产视频1区 日韩欧美中文字幕一区 日本高清中文字幕一区二区三区a 亚洲国产欧美无圣光一区 国产在线视频一区二区三区 欧美国产第一页 在线亚洲欧美日韩 日韩中文字幕第一页 在线不卡一区二区 伊人久久青青 国产精品一区二区在线播放 www.五月婷婷 麻豆久久婷婷国产综合五月 亚洲精品区 久久国产欧美另类久久久 99在线视频免费 伊人久久中文字幕久久cm 久久精品成人免费看 久久这里只有精品首页 88国产精品视频一区二区三区 中文字幕日本在线mv视频精品 国产在线精品成人一区二区三区 伊人精品线视天天综合 亚洲一区二区黄色 国产尤物视频在线 亚洲精品99久久久久中文字幕 国产一区二区三区免费观看 伊人久久大香线蕉综合电影网 国产成人精品区在线观看 日本精品一区二区三区视频 日韩高清在线二区 久久免费播放视频 一区二区成人国产精品 国产精品免费精品自在线观看 亚洲精品视频二区 麻豆国产精品有码在线观看 精品日本一区二区 亚洲欧洲久久 久久中文字幕综合婷婷 中文字幕视频在线 国产成人精品综合在线观看 91精品国产91久久久久福利 精液呈暗黄色 香蕉国产综合久久猫咪 国产专区精品 亚洲精品无码不卡 国产永久视频 亚洲成a人片在线播放观看国产 一区二区国产在线播放 亚洲一区二区黄色 欧美日韩在线观看视频 亚洲精品另类 久久国产综合尤物免费观看 国产一区二区三区国产精品 高清视频一区 国产精品igao视频 国产精品资源在线 久久综合精品国产一区二区三区 www.五月婷婷 精品色综合 99热国产免费 麻豆福利影院 亚洲伊人久久大香线蕉苏妲己 久久电影院久久国产 久久精品伊人 在线日韩理论午夜中文电影 亚洲国产欧洲综合997久久 伊人国产精品 久草国产精品 欧美一区精品二区三区 亚洲成人高清在线 91免费国产精品 日韩精品福利在线 国产一线在线观看 国产不卡在线看 久久99青青久久99久久 亚洲精品亚洲人成在线播放 99久久免费看国产精品 国产日本在线观看 青草国产在线视频 麻豆久久婷婷国产综合五月 国产中文字幕一区 91久久精品国产性色也91久久 国产一区a 国产欧美日韩成人 国产亚洲女在线精品 一区二区美女 中文字幕在线2021一区 在线小视频国产 久久这里只有精品首页 国产在线第三页 欧美日韩中文字幕 在线亚洲+欧美+日本专区 精品国产一区二区三区不卡 久久这里精品 欧美在线va在线播放 精液呈暗黄色 91精品国产手机 91在线免费播放 欧美视频亚洲色图 欧美国产日韩精品 日韩高清不卡在线 精品视频免费观看 欧美日韩一区二区三区四区 国产欧美亚洲精品第二区首页 亚洲韩精品欧美一区二区三区 国产精品视频免费 在线精品小视频 久久午夜夜伦伦鲁鲁片 国产无套在线播放 久热这里只精品99re8久 欧美久久久久 久久香蕉国产线看观看精品蕉 国产成人精品男人的天堂538 亚洲人成网站色7799在线观看 日韩在线第二页 一本色道久久综合狠狠躁篇 国产一区二区三区不卡在线观看 亚洲乱码在线 在线观看欧美国产 久久福利青草精品资源站免费 国产玖玖在线观看 在线亚洲精品 亚洲成aⅴ人在线观看 精品91在线 欧美一区二三区 日韩中文字幕视频在线 日本成人一区二区 日韩免费专区 国内精品在线观看视频 久久国产综合尤物免费观看 国产精品系列在线观看 一本一道久久a久久精品综合 亚洲免费播放 久久精品国产免费 久久人精品 亚洲毛片网站 亚洲成a人一区二区三区 韩国福利一区二区三区高清视频 亚洲精品天堂在线 一区二区三区中文字幕 亚洲国产色婷婷精品综合在线观看 亚洲国产成人久久笫一页 999国产视频 国产精品香港三级在线电影 欧美日韩一区二区三区四区 日韩国产欧美 国产精品99一区二区三区 午夜国产精品理论片久久影院 亚洲精品中文字幕麻豆 亚洲国产高清视频 久久免费手机视频 日韩a在线观看 五月婷婷亚洲 亚洲精品中文字幕麻豆 中文字幕丝袜 www国产精品 亚洲天堂精品在线 亚洲乱码一区 国产日韩欧美三级 久久999精品 伊人热人久久中文字幕 久热国产在线视频 国产欧美日韩在线观看一区二区三区 国产一二三区在线 日韩国产欧美 91精品国产91久久久久 亚洲一区小说区中文字幕 精品一区二区免费视频 国产精品视频免费 国产精品亚洲综合色区韩国 亚洲国产精品成人午夜在线观看 欧美国产日韩精品 中文字幕精品一区二区精品