專利名稱:一種創(chuàng)建并調(diào)用通用組件的方法及設(shè)備的制作方法
技術(shù)領(lǐng)域:
本申請涉及計(jì)算機(jī)技術(shù)領(lǐng)域,尤其涉及一種創(chuàng)建通用組件并對創(chuàng)建的通用組件進(jìn)行調(diào)用的方法及設(shè)備。
背景技術(shù):
隨著計(jì)算機(jī)軟件技術(shù)的不斷發(fā)展,軟件越來越朝著大而復(fù)雜的方向發(fā)展,為了對這種大而復(fù)雜的軟件進(jìn)行有效運(yùn)用,可以將這些軟件劃分成一系列可先行實(shí)現(xiàn)、易于開發(fā)、理解和調(diào)整的組件。劃分后的每個(gè)組件功能確定、單獨(dú)設(shè)計(jì)、分別編碼,最后將多個(gè)組件組裝在一起,完成軟件的運(yùn)行。在軟件開發(fā)過程中,為了提高軟件代碼的可復(fù)用性,提高開發(fā)效率,可將常用的界面元素封裝成一組相對獨(dú)立的組件,由這些組件構(gòu)成圖形用戶界面(Graphical User Interface,⑶I)庫或⑶I平臺(tái)。⑶I平臺(tái)中可存在幾十種甚至上百種可用的組件,每種組件能夠?qū)崿F(xiàn)界面上的一種可見或不可見的功能。在⑶I平臺(tái)內(nèi)的組件可以以樹形結(jié)構(gòu)存在,任意一個(gè)組件都可以將其他若干個(gè)組件作為自身的子組件,構(gòu)成組件之間的嵌套關(guān)系。如圖I所示,為CTI平臺(tái)內(nèi)組件之間的嵌套關(guān)系示意圖,從圖I中可以看出,組件I內(nèi)嵌套了組件2和組件3,而組件2內(nèi)又進(jìn)一步嵌套了組件4。作為子組件的組件4可以被組件2所調(diào)用,同樣的,作為子組件的組件2和組件3又可以被組件I所調(diào)用。而實(shí)際上,作為被嵌套的某些組件的功能具有通用性,即這些組件經(jīng)常被嵌套至多種組件中,并且嵌套在每種組件中時(shí),這些組件的屬性都相同,則這些具有通用功能的組件稱之為通用組件(Common Component)。例如,即時(shí)通信軟件中的邊框組件可以被各種窗口類組件所嵌套,用于繪制窗口類組件的邊框,背景組件也可以被各種窗口類組件所嵌套,用于繪制窗口類組件的背景,因此,邊框組件和背景組件可稱之為通用組件。假設(shè)窗口類組件有會(huì)話窗口組件和系統(tǒng)消息窗口組件,按照目前的組件嵌套模式,如圖2所示,會(huì)話窗口組件要通過創(chuàng)建邊框組件和背景組件來實(shí)現(xiàn)對邊框組件和背景組件的嵌套,進(jìn)而獲得邊框組件和背景組件的功能;系統(tǒng)消息窗口組件同樣也要通過創(chuàng)建邊框組件和背景組件來實(shí)現(xiàn)對邊框組件和背景組件的嵌套,進(jìn)而獲得邊框組件和背景組件的功能。從圖2所示的嵌套結(jié)構(gòu)可以看出,對于通用組件而言,當(dāng)通用組件被多個(gè)其他組件嵌套時(shí),即使這些通用組件被嵌套在其他組件中的屬性相同,其他組件也必須分別嵌套通用組件,并只能對自身嵌套的通用組件進(jìn)行調(diào)用,來達(dá)到運(yùn)行通用組件功能的目的。在這種嵌套方式下,系統(tǒng)需要為每個(gè)其他組件創(chuàng)建通用組件分配用于創(chuàng)建的系統(tǒng)資源,即使相同的通用組件被多個(gè)其他組件創(chuàng)建時(shí),系統(tǒng)也要為每次創(chuàng)建過程分配系統(tǒng)資源,導(dǎo)致內(nèi)存資源的大量浪費(fèi);同時(shí),每個(gè)組件在運(yùn)行通用組件之前,都要?jiǎng)?chuàng)建該通用組件,由于每次的創(chuàng)建過程會(huì)占用一定的時(shí)長,因此,組件的正常運(yùn)行速度也受到極大的影響。
發(fā)明內(nèi)容
本申請的目的在于提供一種創(chuàng)建并調(diào)用通用組件的方法及設(shè)備,用以解決現(xiàn)有技術(shù)中存在的由于嵌套創(chuàng)建通用組件,導(dǎo)致內(nèi)存資源的大量浪費(fèi)和組件運(yùn)行速度低的問題。一種創(chuàng)建通用組件的方法,應(yīng)用于具有封裝后的組件的軟件系統(tǒng)中,包括在軟件初始化時(shí),生成通用組件庫;根據(jù)配置文件中記錄的通用組件的屬性信息,創(chuàng)建通用組件;將創(chuàng)建的通用組件以及該通用組件的標(biāo)識(shí)存儲(chǔ)至所述通用組件庫中。 一種調(diào)用通用組件的方法,包括確定待調(diào)用的通用組件的標(biāo)識(shí);根據(jù)確定的所述標(biāo)識(shí),從已存儲(chǔ)多個(gè)通用組件的通用組件庫中查找所述標(biāo)識(shí)所表示的通用組件;調(diào)用查找出的通用組件。一種創(chuàng)建通用組件的設(shè)備,應(yīng)用于具有封裝后的組件的軟件系統(tǒng)中,包括庫創(chuàng)建模塊,用于在軟件初始化時(shí),生成通用組件庫;組件創(chuàng)建模塊,用于根據(jù)配置文件中記錄的通用組件的屬性信息,創(chuàng)建通用組件;存儲(chǔ)模塊,用于將創(chuàng)建的通用組件以及該通用組件的標(biāo)識(shí)存儲(chǔ)至所述通用組件庫中。一種調(diào)用通用組件的設(shè)備,包括標(biāo)識(shí)確定模塊,用于確定待調(diào)用的通用組件的標(biāo)識(shí);查找模塊,用于根據(jù)確定的所述標(biāo)識(shí),從已存儲(chǔ)多個(gè)通用組件的通用組件庫中查找所述標(biāo)識(shí)所表示的通用組件;調(diào)用模塊,用于調(diào)用查找出的通用組件。本申請有益效果如下本申請實(shí)施例提供的方案,在軟件初始化過程中,完成通用組件的統(tǒng)一創(chuàng)建,并統(tǒng)一存儲(chǔ)在通用組件庫的過程,在其他普通組件需要調(diào)用通用組件時(shí),無需分別創(chuàng)建通用組件,而只需要直接調(diào)用已創(chuàng)建的通用組件即可。在本申請實(shí)施例的方案中,通用組件只需創(chuàng)建一次,這減少了通用組件的創(chuàng)建數(shù)量,可有效減少通用組件創(chuàng)建過程中占用的系統(tǒng)資源,且提高其他普通組件的運(yùn)行速度。
圖I為背景技術(shù)中組件之間的嵌套關(guān)系示意圖;圖2為背景技術(shù)中組件之間的嵌套關(guān)系示意圖;圖3為本申請實(shí)施例一中創(chuàng)建通用組件的方法步驟示意圖;圖4為本申請實(shí)施例二中調(diào)用通用組件的方法步驟示意圖;圖5為本申請實(shí)施例三中調(diào)用通用組件的方法步驟示意圖;圖6為本申請實(shí)施例三中普通組件與通用組件之間的調(diào)用關(guān)系示意圖7為本申請實(shí)施例四中創(chuàng)建通用組件的設(shè)備結(jié)構(gòu)示意圖;圖8為本申請實(shí)施例五中調(diào)用通用組件的設(shè)備結(jié)構(gòu)示意圖。
具體實(shí)施例方式為實(shí)現(xiàn)本申請目的,本申請實(shí)施例提出一種新的針對通用組件的創(chuàng)建以及調(diào)用的方案,在軟件的初始化階段,創(chuàng)建通用組件并將創(chuàng)建成功的通用組件以及其標(biāo)識(shí)存儲(chǔ)在通用組件庫中,當(dāng)普通組件需要使用通用組件的功能時(shí),無需再分別嵌套該通用組件,而是直接調(diào)用通用組件庫中的通用組件即可。通過本申請實(shí)施例的方案,軟件程序中的各普通組件無需分別創(chuàng)建通用組件,而只要需要調(diào)用通用組件庫中的通用組件就能夠獲得通用組件的功能,由于只需要在軟件的初始化階段創(chuàng)建一次通用組件,普通組件就可以在任何時(shí)候自由地調(diào)用通用組件,減少了通用組件的創(chuàng)建次數(shù),可有效減少通用組件創(chuàng)建時(shí)對系統(tǒng)內(nèi)存資源的占用,同時(shí),對于普通組件而言,不需要各自創(chuàng)建通用組件,而只需要調(diào)用通用組件,極大地提高了組件的運(yùn)行速度,進(jìn)而提高了軟件的運(yùn)行速度。
下面結(jié)合說明書附圖對本申請實(shí)施例的方案進(jìn)行詳細(xì)描述。需要說明的是,為了與創(chuàng)建以及被調(diào)用的通用組件相區(qū)別,將本申請各實(shí)施例中涉及的軟件程序中需要調(diào)用通用組件的其他組件稱之為普通組件。實(shí)施例一如圖3所示,為本申請實(shí)施例一中創(chuàng)建通用組件的方法步驟示意圖,所述方法包括以下步驟步驟101 :在軟件開始初始化時(shí),生成通用組件庫。本申請實(shí)施例的方案是,在軟件初始化時(shí)開始執(zhí)行創(chuàng)建通用組件的操作,并在初始化結(jié)束之前完成通用組件的創(chuàng)建過程。這樣做的目的是在軟件正常運(yùn)行之前已執(zhí)行完畢創(chuàng)建通用組件的操作,可使在軟件正常運(yùn)行時(shí),軟件中的普通組件根據(jù)需求直接調(diào)用已創(chuàng)建完畢的通用組件。若是在軟件初始化結(jié)束時(shí)還沒有完成創(chuàng)建通用組件的操作,甚至在軟件中的普通組件需要調(diào)用通用組件時(shí)才創(chuàng)建的話,由于創(chuàng)建通用組件需要占用一定的時(shí)長,因此,這種做法會(huì)造成普通組件調(diào)用通用組件的過程有較大時(shí)延。在執(zhí)行步驟101時(shí),當(dāng)軟件被初始化啟動(dòng)后,就為該軟件生成一個(gè)通用組件庫。以所述軟件是即時(shí)通信軟件為例,本步驟101的具體實(shí)現(xiàn)過程為首先,實(shí)時(shí)檢測所述即時(shí)通信軟件是否被初始化啟動(dòng),即該即時(shí)通信軟件是否在所安裝的設(shè)備中啟動(dòng)。然后,當(dāng)檢測出所述即時(shí)通信軟件被初始化啟動(dòng)時(shí),對即時(shí)通信軟件所在的設(shè)備的內(nèi)存資源進(jìn)行掃描,并分配一定量的內(nèi)存資源作為通用組件庫的內(nèi)存資源,所述分配的內(nèi)存資源用于在通用組件庫中存儲(chǔ)后續(xù)所創(chuàng)建的通用組件。在為即時(shí)通信軟件的通用組件庫分配內(nèi)存資源,為通用組件庫的讀寫操作分配進(jìn)程,以及記錄通用組件庫的入口地址和其他用于對通用組件庫中的內(nèi)容進(jìn)行操作的信息后,所述通用組件庫就生成完畢。為了提高通用組件庫的訪問速度,本實(shí)施例中生成的通用組件庫中可采用映射(map)或哈希映射(hashmap)的數(shù)據(jù)結(jié)構(gòu)。步驟102 :根據(jù)配置文件中記錄的通用組件的屬性信息,創(chuàng)建通用組件。
在軟件的開發(fā)過程中,已經(jīng)將一些常用的元素封裝成相對獨(dú)立的組件,這些已封裝的相對獨(dú)立的組件中包括通用組件,因此,在軟件開發(fā)完成時(shí),通用組件的屬性信息已記錄在配置文件中,該配置文件中記錄了能夠用于創(chuàng)造通用組件的屬性信息,且該配置文件存儲(chǔ)在軟件的文本存儲(chǔ)區(qū)域中。所述屬性信息包括但不限于以下信息中的一種或多種的組合I、通用組件的類型,表示通用組件是什么功能的組件。例如若通用組件的類型是Background,表示該通用組件是用于生成背景的組件;若通用組件的類型是Border,表示該通用組件是用于生成邊框的組件。2、通用組件的名稱。仍以一個(gè)Background類型的通用組件為例,其名稱可以是在軟件開發(fā)過程中所 定義的名稱。3、運(yùn)行通用組件時(shí)所需數(shù)據(jù)的存儲(chǔ)地址,用于表示通用組件在被調(diào)用運(yùn)行時(shí),所需調(diào)用的其他數(shù)據(jù)的存儲(chǔ)地址。例如,一個(gè)Background類型的通用組件被調(diào)用以生成背景時(shí),同時(shí)需要調(diào)用各背景圖片,因此,在Background類型的通用組件的屬性信息中需要記錄各背景圖片的存儲(chǔ)地址,以便于在生成背景時(shí)可快速調(diào)用顯示各項(xiàng)背景圖片。在步驟102的執(zhí)行過程中,由于配置文件中記錄了多個(gè)通用組件的屬性信息,每一組屬性信息表示一個(gè)通用組件的屬性,因此,當(dāng)正確讀取出配置文件中記錄的每組屬性信息后,可以使用該屬性信息分別創(chuàng)建多個(gè)通用組件,具體的創(chuàng)建過程為第一步按照設(shè)定的實(shí)例創(chuàng)建方式,創(chuàng)建通用組件的實(shí)例。在本實(shí)施例的方案中,每個(gè)通用組件的實(shí)例創(chuàng)建過程相同,具體過程包括根據(jù)待創(chuàng)建的通用組件的類型查找出相應(yīng)的類工廠(class factory),并通過調(diào)用所述類工廠的創(chuàng)建實(shí)例(CreateInstance)成員函數(shù)完成對同類型通用組件的創(chuàng)建,并返回創(chuàng)建后的通用組件的實(shí)例。所述類工廠的實(shí)質(zhì)是一個(gè)組件對象模型(COM)中的對象,類工廠中定義了一個(gè)IClassFactory接口,通過該IClassFactory接口中的CreateInstance成員函數(shù),完成對通用組件的實(shí)例化。另外,根據(jù)COM規(guī)范的定義,組件對象類型(COM Class)和類工廠是配對出現(xiàn)的,也就是說,若要對某種類型通用組件實(shí)例化,就要通過該類型的通用組件對應(yīng)的類工廠來實(shí)現(xiàn)。第二步根據(jù)配置文件中記錄的通用組件的屬性信息,為創(chuàng)建的實(shí)例設(shè)置屬性,得到創(chuàng)建完成的通用組件。所述為實(shí)例設(shè)置屬性是指通過調(diào)用組件的初始化(Initialize)算法,把一組屬性信息傳入實(shí)例,實(shí)現(xiàn)將屬性應(yīng)用于通用組件實(shí)例的目的。下面以Background類型的通用組件為例,來說明使用屬性信息創(chuàng)建通用組件的過程假設(shè)在配置文件中有兩個(gè)Backgound通用組件,這兩個(gè)通用組件的屬性信息不同,第一個(gè)Background通用組件加載一個(gè)圖片來填充背景,第二個(gè)Background通用組件使用白色來填充背景。
配置文件中記錄的這兩個(gè)Backgound通用組件的屬性信息可以如下所示
<Components>
〈Component〉
<Class>Background</Class> //笫一個(gè)通用組件的類型是
Backgound
<ID>Background_ID_l</ID> //第一個(gè) Backgound 通用組件名稱為BackgroundTDl
<Style>Image</Style>//第一個(gè) Backgound 通用組件的填充
方式是圖像填充
<Image>back.bmp</Image> //第一個(gè) Backgound 通用組件中圖像填
充用于填充背景
<FillType>Tile</FillType> //第一個(gè) Backgound 通用組件的圖像填充方式是平鋪
〈/Component〉
〈Component〉
<Class>Background</Class> //第二個(gè)通用組件的類型是 Backgound<ID>Background_ID_2</ID> //第二個(gè) Backgound 通用組件名稱為Background—ID—2
<Style>F illColor</ Style> //笫二個(gè) Backgound 通用組件是 1 色填
充
<Color>OxFFFFFF</Color> //第二個(gè) Backgound 通用組件的填充的顏色是白色
〈/Component〉
〈/Components〉在創(chuàng)建過程中,當(dāng)讀取配置文件中的上述第一個(gè)通用組件的屬性信息后,確定該通用組件的類型是Background,則查找出對應(yīng)的類工廠BackgroundFactory。然后調(diào)用BackgroundFactory 的 CreateInstance 成員函數(shù)完成第一個(gè)Backgound通用組件的創(chuàng)建,假設(shè)返回的第一個(gè)Backgound通用組件的實(shí)例保存在spBackgroundl中。
接著,設(shè)置第一個(gè)Backgound通用組件的屬性,調(diào)用通用組件的Initialize算法,將第一個(gè)Backgound通用組件的屬性信息傳入第一個(gè)Backgound通用組件的實(shí)例中。具體的傳入方式是運(yùn)行Initialize算法,依次讀取出第一個(gè)Backgound通用組件的每一個(gè)屬性信息,針對每次讀取的屬性信息,調(diào)用相應(yīng)的屬性設(shè)置函數(shù)進(jìn)行傳入。例如,讀取的屬性信息是第一個(gè)Backgound通用組件的填充方式(Style),則調(diào)用SetStyle函數(shù),將第一個(gè)Backgound通用組件的填充方式“圖像填充Image”傳入實(shí)例;再例如,讀取的屬性信息是第一個(gè)Backgound通用組件的圖像填充方式(FillType),則調(diào)用SetFillType函數(shù),將第一個(gè)Backgound通用組件的圖像填充方式“平鋪Tile”傳入實(shí)例。在上述針對第一個(gè)通用組件創(chuàng)建完成后,繼續(xù)讀取第二個(gè)通用組件的屬性信息,針對第二個(gè)通用組件的創(chuàng)建方式與針對第一個(gè)通用組件的創(chuàng)建方式相同,但是,在將第二個(gè)Backgound通用組件的屬性信息傳入第二個(gè)Backgound通用組件的實(shí)例中時(shí),由于第一·個(gè)通用組件和第二個(gè)通用組件的屬性信息的內(nèi)容不同,因此,最終創(chuàng)建出的兩個(gè)Backgound通用組件能夠?qū)崿F(xiàn)不同外觀效果的背景。步驟103 :將創(chuàng)建的通用組件以及通用組件的標(biāo)識(shí)存儲(chǔ)至所述通用組件庫中。從步驟102的實(shí)現(xiàn)方式中可以看出,本申請實(shí)施例在創(chuàng)建實(shí)例時(shí),是以某一類型的通用組件對應(yīng)的類工廠來創(chuàng)建的,創(chuàng)建的同一類型的通用組件可以有多個(gè)實(shí)例,因此,為了詳細(xì)區(qū)分各通用組件,當(dāng)創(chuàng)建了實(shí)例后,就可以為每個(gè)創(chuàng)建的實(shí)例分配標(biāo)識(shí)(ID)。本申請實(shí)施例的方案中就是針對通用組件的實(shí)例來分配ID的,這樣做的目的是通過相同的類工廠創(chuàng)建的同類型通用組件,這些通用組件的類型雖然相同但其屬性信息不完全相同,產(chǎn)生的行為結(jié)果也不同,因此,如果概括性地針對同類組件分配ID的話,可能會(huì)導(dǎo)致后續(xù)的調(diào)用過程出現(xiàn)錯(cuò)誤,但使用本實(shí)施例中針對實(shí)例分配ID的方式,就可以避免對不同實(shí)例的通用組件進(jìn)行調(diào)研,保證通用組件調(diào)用的精確度。具體地,本步驟103可以以分布式Key-Value (鍵-值對)的存儲(chǔ)方式進(jìn)行存儲(chǔ),實(shí)現(xiàn)方式如下第一步確定指向創(chuàng)建的實(shí)例在通用組件庫的存儲(chǔ)位置的內(nèi)容指針。以創(chuàng)建Background類型的通用組件(稱之為通用組件_1)為例,當(dāng)在步驟102中根據(jù)通用組件_1的屬性信息創(chuàng)建實(shí)例(稱之為實(shí)例_1)后,將該實(shí)例_1存儲(chǔ)在通用組件庫中,并定義指向?qū)嵗齙1存儲(chǔ)位置的內(nèi)容指針(稱之為內(nèi)容指針_1)。第二步為創(chuàng)建的通用組件的實(shí)例分配標(biāo)識(shí)。仍以創(chuàng)建Background類型的通用組件_1為例,當(dāng)在步驟102中根據(jù)通用組件_1的屬性信息創(chuàng)建實(shí)例_1后,為該實(shí)例_1分配一個(gè)唯一表示該實(shí)例_1的ID,例如,分配給該實(shí)例 _1 的標(biāo)識(shí)為 “ ID_C0MM0N_BKGND1”。上述第一步和第二步的實(shí)現(xiàn)順序不固定,也可以先執(zhí)行第二步后執(zhí)行第一步,也可以第一步和第二步并列執(zhí)行。第三步建立通用組件的實(shí)例的標(biāo)識(shí)與內(nèi)容指針之間的對應(yīng)關(guān)系。在第一步中為通用組件_1的實(shí)例_1分配ID,且在第二步中定義了指向?qū)嵗齙1在通用組件庫中的存儲(chǔ)位置的內(nèi)容指針_1后,可以建立ID與內(nèi)容指針_1之間的對應(yīng)關(guān)系,所述對應(yīng)關(guān)系中的標(biāo)識(shí)所表示的實(shí)例與對應(yīng)的內(nèi)容指針指向的實(shí)例相同。
第四步將實(shí)例的標(biāo)識(shí)與內(nèi)容指針之間的對應(yīng)關(guān)系存儲(chǔ)至所述通用組件庫中。此時(shí),在通用組件庫中不僅存儲(chǔ)了通用組件的內(nèi)容,還同時(shí)以key-value分布式存儲(chǔ)系統(tǒng)的形式將標(biāo)識(shí)與內(nèi)容指針之間的對應(yīng)關(guān)系存儲(chǔ)在通用組件庫中。本申請實(shí)施例一的步驟102和步驟103中,依次對將配置文件中記錄的各通用組件的屬性信息進(jìn)行讀取并操作,分別創(chuàng)建對應(yīng)的通用組件并存儲(chǔ)在通用組件庫中,直至將配置文件中記錄各屬性信息對應(yīng)的通用組件全部創(chuàng)建并存儲(chǔ)。通過本申請實(shí)施例一的方案,在軟件程序初始化過程中完成通用組件的統(tǒng)一創(chuàng)建以及統(tǒng)一存儲(chǔ)的過程,與現(xiàn)有的由普通組件各自創(chuàng)建通用組件的方式相比,可有效減少創(chuàng)建通用組件的次數(shù),進(jìn)而減少通用組件的創(chuàng)建過程所占用的內(nèi)存數(shù)量,提高普通組件的運(yùn)行速度;同時(shí),本實(shí)施例在軟件初始化過程中完成通用組件的創(chuàng)建操作,使得普通組件可根據(jù)需求直接調(diào)用已創(chuàng)建完畢的通用組件,而無需再等待通用組件的創(chuàng)建過程,并且本實(shí)施例中通過創(chuàng)建實(shí)例的方式來創(chuàng)建通用組件,并為實(shí)例分配唯一的標(biāo)識(shí),即使通用組件庫中 存儲(chǔ)了同類型的多個(gè)通用組件,也可以根據(jù)實(shí)例的ID查詢出特定屬性的通用組件,避免同類型的多個(gè)通用組件的混淆,保證了通用組件高精確度的調(diào)用。實(shí)施例二當(dāng)采用實(shí)施例一的方案創(chuàng)建了通用組件后,就可以進(jìn)一步對通用組件庫中的通用組件進(jìn)行調(diào)用,如圖4所示,為本申請實(shí)施例二中調(diào)用通用組件的方法步驟示意圖,所述方法包括以下步驟步驟201 :確定待調(diào)用的通用組件的標(biāo)識(shí)。在本實(shí)施例的方案中,普通組件內(nèi)存儲(chǔ)了可調(diào)用的通用組件的標(biāo)識(shí),當(dāng)普通組件需要調(diào)用通用組件時(shí),讀取自身存儲(chǔ)的通用組件的標(biāo)識(shí)來進(jìn)行調(diào)用操作。步驟202 :根據(jù)確定的所述標(biāo)識(shí),從已存儲(chǔ)多個(gè)通用組件的通用組件庫中查找所述標(biāo)識(shí)所表示的通用組件。根據(jù)通用組件庫中存儲(chǔ)的通用組件的形式不同,本步驟的具體實(shí)現(xiàn)方式也有所不同。假設(shè)實(shí)施例一中,通用組件庫中存儲(chǔ)的是通用組件的實(shí)例,以及實(shí)例的標(biāo)識(shí)與內(nèi)容指針之間的對應(yīng)關(guān)系,則在本步驟中,從通用組件庫中查找所述標(biāo)識(shí)所表示的通用組件的具體實(shí)現(xiàn)過程為第一步根據(jù)通用組件的實(shí)例的標(biāo)識(shí)與內(nèi)容指針之間的對應(yīng)關(guān)系,確定待調(diào)用的通用組件的實(shí)例的標(biāo)識(shí)對應(yīng)的內(nèi)容指針。步驟201中確定的待調(diào)用的通用組件的標(biāo)識(shí)是能夠唯一表示該通用組件的標(biāo)識(shí),若在實(shí)施例一種通用組件庫中存儲(chǔ)的是通用組件的實(shí)例的標(biāo)識(shí),則在步驟201中確定的通用組件的標(biāo)識(shí)即為該通用組件的實(shí)例的標(biāo)識(shí)。在確定待調(diào)用的通用組件的標(biāo)識(shí)后,就可從通用組件庫中查詢與該標(biāo)識(shí)對應(yīng)的內(nèi)容指針。第二步將確定的內(nèi)容指針?biāo)赶虻膶?shí)例作為查找出的通用組件的實(shí)例。由于通用組件是由實(shí)例創(chuàng)建的,因此,在查找出通用組件的實(shí)例后,也就是查找出了已創(chuàng)建的通用組件。步驟203 :調(diào)用查找出的通用組件。若在步驟202中查找出的是通用組件的實(shí)例,則在本步驟中通過調(diào)用通用組件的實(shí)例入口,并運(yùn)行所述實(shí)例,以達(dá)到調(diào)用、運(yùn)行通用組件的目的。通過本申請實(shí)施例二的方案,普通組件在需要運(yùn)行通用組件、獲得通用組件的功能時(shí),無需分別創(chuàng)建通用組件,而是直接調(diào)用通用組件庫中已創(chuàng)建的通用組件,去除了普通組件分別創(chuàng)建通用組件時(shí)的時(shí)間消耗以及內(nèi)存資源消耗,提高了組件運(yùn)行效率;且本申請實(shí)施例的方案中,通過通用組件庫內(nèi)針對存儲(chǔ)的各實(shí)例的固定ID來進(jìn)行通用組件的訪問,無需由系統(tǒng)動(dòng)態(tài)為實(shí)例分配ID,在保證通用組件正確調(diào)用的基礎(chǔ)上,減少資源的占用。實(shí)施例三本申請實(shí)施例三通過一個(gè)具體的實(shí)例,來詳細(xì)說明本申請實(shí)施例二的方案。假設(shè)要調(diào)用通用組件的普通組件為會(huì)話窗口組件,會(huì)話窗口組件可調(diào)用的通用組件為背景通用組件和邊框通用組件,背景通用組件的標(biāo)識(shí)為BackgroundID,用于指明會(huì)話窗口組件的背景由哪個(gè)背景通用組件來繪制;邊框通用組件的標(biāo)識(shí)為BorderlD,用于指明會(huì)話窗口組件的邊框由哪個(gè)邊框通用組件來繪制。這兩個(gè)通用組件的標(biāo)識(shí)記載在會(huì)話窗 口組件內(nèi)。如圖5所示,為本實(shí)施例三種,會(huì)話窗口組件調(diào)用通用組件庫中相應(yīng)通用組件的步驟示意圖,包括以下步驟步驟301 :當(dāng)會(huì)話窗口組件要開始繪制窗口時(shí),確定用于繪制背景的背景通用組件的標(biāo)識(shí)BackgroundID,以及確定用于繪制邊框的邊框通用組件的標(biāo)識(shí)BorderlD。步驟302 :會(huì)話窗口組件分別判斷BackgroundID和BorderID是否有效,若是,貝丨J執(zhí)行步驟303 ;否則,若只有一個(gè)標(biāo)識(shí)有效,則有效的標(biāo)識(shí)繼續(xù)執(zhí)行步驟303 ;若兩個(gè)標(biāo)識(shí)都無效,則停止調(diào)用通用組件的操作,利用會(huì)話窗口組件自身的繪制功能進(jìn)行繪制。在本實(shí)施例的方案中,雖然會(huì)話窗口組件中存儲(chǔ)了背景通用組件和邊框通用組件的標(biāo)識(shí),但存儲(chǔ)的通用組件的標(biāo)識(shí)可能是無效的標(biāo)識(shí),為了保證會(huì)話窗口組件能夠正確的調(diào)用通用組件,以及避免無效標(biāo)識(shí)的失敗調(diào)用額外占用系統(tǒng)資源的情況,本步驟中對用于查詢通用組件的標(biāo)識(shí)的有效性進(jìn)行檢查,只有有效的通用組件的標(biāo)識(shí)才能進(jìn)行后續(xù)的通用組件查找過程,對于無效的通用組件的標(biāo)識(shí)不允許使用。以判斷BackgroundID是否有效為例,其判斷方式包括但不限于以下內(nèi)容第一步預(yù)先設(shè)定有效的通用組件標(biāo)識(shí)內(nèi)容的字符串長度的范圍值。在本申請各實(shí)施例的方案中,通用組件的標(biāo)識(shí)(特殊地,通用組件實(shí)例的標(biāo)識(shí))內(nèi)容是字符串,對于有效的標(biāo)識(shí),其內(nèi)容中字符串的長度應(yīng)該在一定的范圍內(nèi),因此,可預(yù)先設(shè)定有效的標(biāo)識(shí)內(nèi)容的字符串長度的范圍值。內(nèi)容中的字符串長度在該范圍值內(nèi)的標(biāo)識(shí)為有效標(biāo)識(shí),否則為無效標(biāo)識(shí)。第二步判斷BackgroundID的內(nèi)容是否為空,若是,則確定所述BackgroundID無效;否則,執(zhí)行第三步。第三步判斷BackgroundID內(nèi)容的字符串長度是否在設(shè)定的范圍值內(nèi);若是,則確定所述BackgroundID有效;否則,確定所述BackgroundID無效。步驟303 :會(huì)話窗口組件通過有效的BackgroundID和BorderID,從通用組件庫中查找出對應(yīng)的內(nèi)容指針。在本實(shí)施例的方案中,會(huì)話窗口組件可以以同步方式,通過預(yù)設(shè)的函數(shù)查找多個(gè)內(nèi)容指針并進(jìn)行實(shí)例的調(diào)用。
通過有效的BackgroundID查找出指向背景通用組件的實(shí)例的內(nèi)容指針,通過有效的BorderID查找出指向邊框通用組件的實(shí)例的內(nèi)容指針。步驟304:會(huì)話窗口組件利用查找出的內(nèi)容指針,從通用組件庫中調(diào)用指向的背景通用組件的實(shí)例和邊框通用組件的實(shí)例。由于通過BackgroundID對應(yīng)的內(nèi)容指針可以確定背景通用組件的實(shí)例,因此,會(huì)話窗口組件調(diào)用并運(yùn)行背景通用組件的實(shí)例,來繪制窗口的背景;同理,通過調(diào)用并運(yùn)行邊框通用組件的實(shí)例,來繪制窗口的邊框。如圖6所示,為通過本實(shí)施例三的方案,普通組件與通用組件之間的調(diào)用關(guān)系示意圖,其中,左邊實(shí)線的通用組件是創(chuàng)建并存儲(chǔ)在通用組件庫中的通用組件;右邊虛線的通用組件是被普通組件調(diào)用的通用組件。除了會(huì)話窗口組件外,其他諸如系統(tǒng)消息窗口組件的普通組件需要調(diào)用背景通用組件和邊框通用組件時(shí),也可按照上述方式進(jìn)行。
實(shí)施例四本申請實(shí)施例四還提供一種與實(shí)施例一屬于同一發(fā)明構(gòu)思下的創(chuàng)建通用組件的設(shè)備,如圖7所示,應(yīng)用于具有封裝后的組件的軟件系統(tǒng)中,包括庫創(chuàng)建模塊11、組件創(chuàng)建模塊12和存儲(chǔ)模塊13,其中庫創(chuàng)建模塊11用于在軟件初始化時(shí),生成通用組件庫;組件創(chuàng)建模塊12用于根據(jù)配置文件中記錄的通用組件的屬性信息,創(chuàng)建通用組件;存儲(chǔ)模塊13用于將創(chuàng)建的通用組件以及通用組件的標(biāo)識(shí)存儲(chǔ)至所述通用組件庫中。所述組件創(chuàng)建模塊12包括實(shí)例創(chuàng)建子模塊21和屬性設(shè)置子模塊22,其中實(shí)例創(chuàng)建子模塊21用于按照設(shè)定的實(shí)例創(chuàng)建方式,創(chuàng)建通用組件的實(shí)例;屬性設(shè)置子模塊22用于根據(jù)配置文件中記錄的通用組件的屬性信息,為創(chuàng)建的實(shí)例設(shè)置屬性。所述存儲(chǔ)|吳塊13包括對應(yīng)關(guān)系建立子|吳塊23和執(zhí)行子|吳塊24,其中對應(yīng)關(guān)系建立子模塊23用于確定指向創(chuàng)建的實(shí)例在通用組件庫中存儲(chǔ)位置的內(nèi)容指針,以及為創(chuàng)建的實(shí)例分配標(biāo)識(shí),并建立實(shí)例的標(biāo)識(shí)與內(nèi)容指針之間的對應(yīng)關(guān)系;執(zhí)行子模塊24用于將實(shí)例的標(biāo)識(shí)與內(nèi)容指針之間的對應(yīng)關(guān)系存儲(chǔ)至所述通用組件庫中。本實(shí)施例四中的創(chuàng)建通用組件的設(shè)備可以是能夠執(zhí)行實(shí)施例一各步驟的設(shè)備,其實(shí)現(xiàn)實(shí)施例一各步驟的邏輯部件不再一一贅述。本實(shí)施例四中的創(chuàng)建通用組件的設(shè)備可以是集成在軟件中的客戶端,也可以是獨(dú)立于軟件但能夠調(diào)用軟件中各項(xiàng)信息的客戶端。實(shí)施例五本申請實(shí)施例五還提供一種與實(shí)施例二和實(shí)施例三屬于同一發(fā)明構(gòu)思下的調(diào)用通用組件的設(shè)備,如圖8所示,包括標(biāo)識(shí)確定模塊31、查找模塊32和調(diào)用模塊33,其中標(biāo)識(shí)確定模塊31用于確定待調(diào)用的通用組件的標(biāo)識(shí);查找模塊32用于根據(jù)確定的所述標(biāo)識(shí),從已存儲(chǔ)多個(gè)通用組件的通用組件庫中查找所述標(biāo)識(shí)所表示的通用組件;調(diào)用模塊33用于調(diào)用查找出的通用組件。還包括判定模塊34,用于判斷標(biāo)識(shí)確定模塊31確定的所述標(biāo)識(shí)的內(nèi)容是否為空,在所述標(biāo)識(shí)的內(nèi)容不為空時(shí),且確定所述標(biāo)識(shí)內(nèi)容的字符串長度在設(shè)定范圍值內(nèi)時(shí),觸發(fā)所述查找模塊32。所述查找模塊32包括指針確定子模塊41和操作子模塊42,其中指針確定子模塊41用于根據(jù)通用組件的實(shí)例的標(biāo)識(shí)與內(nèi)容指針之間的對應(yīng)關(guān)系,確定待調(diào)用的通用組件的實(shí)例的標(biāo)識(shí)對應(yīng)的內(nèi)容指針;操作子模塊42用于將確定的內(nèi)容指針?biāo)赶虻膶?shí)例作為查找出的通用組件的實(shí)例。所述調(diào)用模塊33,具體用于調(diào)用查找出的通用組件的實(shí)例入口,并運(yùn)行所述實(shí)例。本實(shí)施例五中的調(diào)用通用組件的設(shè)備可以是能夠執(zhí)行實(shí)施例二和實(shí)施例三各步驟的設(shè)備,其實(shí)現(xiàn)實(shí)施例二和實(shí)施例三各步驟的邏輯部件不再一一贅述。本實(shí)施例五中的調(diào)用通用組件的設(shè)備可以集成在軟件中的各普通組件中,當(dāng)某一普通組件需要調(diào)用通用組件時(shí),可以根據(jù)本地集成的調(diào)用通用組件的設(shè)備的功能完成調(diào)用;調(diào)用通用組件的設(shè)備也可以獨(dú)立于軟件的普通組件,當(dāng)某一普通組件需要調(diào)用通用組 件時(shí),應(yīng)首先運(yùn)行調(diào)用通用組件的設(shè)備,通過該設(shè)備完成對通用組件的調(diào)用。本領(lǐng)域內(nèi)的技術(shù)人員應(yīng)明白,本申請的實(shí)施例可提供為方法、系統(tǒng)、或計(jì)算機(jī)程序產(chǎn)品。因此,本申請可采用完全硬件實(shí)施例、完全軟件實(shí)施例、或結(jié)合軟件和硬件方面的實(shí)施例的形式。而且,本申請可采用在一個(gè)或多個(gè)其中包含有計(jì)算機(jī)可用程序代碼的計(jì)算機(jī)可用存儲(chǔ)介質(zhì)(包括但不限于磁盤存儲(chǔ)器、CD-ROM、光學(xué)存儲(chǔ)器等)上實(shí)施的計(jì)算機(jī)程序產(chǎn)品的形式。本申請是參照根據(jù)本申請實(shí)施例的方法、設(shè)備(系統(tǒng))、和計(jì)算機(jī)程序產(chǎn)品的流程圖和/或方框圖來描述的。應(yīng)理解可由計(jì)算機(jī)程序指令實(shí)現(xiàn)流程圖和/或方框圖中的每一流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結(jié)合。可提供這些計(jì)算機(jī)程序指令到通用計(jì)算機(jī)、專用計(jì)算機(jī)、嵌入式處理機(jī)或其他可編程數(shù)據(jù)處理設(shè)備的處理器以產(chǎn)生一個(gè)機(jī)器,使得通過計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備的處理器執(zhí)行的指令產(chǎn)生用于實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能的裝置。這些計(jì)算機(jī)程序指令也可存儲(chǔ)在能引導(dǎo)計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備以特定方式工作的計(jì)算機(jī)可讀存儲(chǔ)器中,使得存儲(chǔ)在該計(jì)算機(jī)可讀存儲(chǔ)器中的指令產(chǎn)生包括指令裝置的制造品,該指令裝置實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能。這些計(jì)算機(jī)程序指令也可裝載到計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備上,使得在計(jì)算機(jī)或其他可編程設(shè)備上執(zhí)行一系列操作步驟以產(chǎn)生計(jì)算機(jī)實(shí)現(xiàn)的處理,從而在計(jì)算機(jī)或其他可編程設(shè)備上執(zhí)行的指令提供用于實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能的步驟。盡管已描述了本申請的優(yōu)選實(shí)施例,但本領(lǐng)域內(nèi)的技術(shù)人員一旦得知了基本創(chuàng)造性概念,則可對這些實(shí)施例做出另外的變更和修改。所以,所附權(quán)利要求意欲解釋為包括優(yōu)選實(shí)施例以及落入本申請范圍的所有變更和修改。顯然,本領(lǐng)域的技術(shù)人員可以對本申請進(jìn)行各種改動(dòng)和變型而不脫離本申請的精神和范圍。這樣,倘若本申請的這些修改和變型屬于本申請權(quán)利要求及其等同技術(shù)的范圍之內(nèi),則本申請也意圖包含這些改動(dòng)和變型在內(nèi)。
權(quán)利要求
1.一種創(chuàng)建通用組件的方法,其特征在于,應(yīng)用于具有封裝后的組件的軟件系統(tǒng)中,包括 在軟件初始化時(shí),生成通用組件庫; 根據(jù)配置文件中記錄的通用組件的屬性信息,創(chuàng)建通用組件; 將創(chuàng)建的通用組件以及該通用組件的標(biāo)識(shí)存儲(chǔ)至所述通用組件庫中。
2.如權(quán)利要求I所述的方法,其特征在于,所述屬性信息包括以下信息中的一種或多種組合 通用組件的類型、通用組件的名稱和運(yùn)行通用組件時(shí)所需數(shù)據(jù)的存儲(chǔ)地址。
3.如權(quán)利要求I所述的方法,其特征在于,根據(jù)配置文件中記錄的通用組件的屬性信息,創(chuàng)建通用組件,具體包括 按照設(shè)定的實(shí)例創(chuàng)建方式,創(chuàng)建通用組件的實(shí)例,并根據(jù)配置文件中記錄的通用組件的屬性信息,為創(chuàng)建的實(shí)例設(shè)置屬性。
4.如權(quán)利要求3所述的方法,其特征在于,將創(chuàng)建的通用組件以及通用組件的標(biāo)識(shí)存儲(chǔ)至所述通用組件庫中,具體包括 確定指向創(chuàng)建的實(shí)例在通用組件庫中存儲(chǔ)位置的內(nèi)容指針,以及為創(chuàng)建的實(shí)例分配標(biāo)識(shí),并建立實(shí)例的標(biāo)識(shí)與內(nèi)容指針之間的對應(yīng)關(guān)系; 將實(shí)例的標(biāo)識(shí)與內(nèi)容指針之間的對應(yīng)關(guān)系存儲(chǔ)至所述通用組件庫中。
5.一種調(diào)用通用組件的方法,其特征在于,包括 確定待調(diào)用的通用組件的標(biāo)識(shí); 根據(jù)確定的所述標(biāo)識(shí),從已存儲(chǔ)多個(gè)通用組件的通用組件庫中查找所述標(biāo)識(shí)所表示的通用組件; 調(diào)用查找出的通用組件。
6.如權(quán)利要求5所述的方法,其特征在于,確定待調(diào)用的通用組件的標(biāo)識(shí)之后,且從通用組件庫中查找所述標(biāo)識(shí)所表示的通用組件之前,所述方法還包括 判斷所述標(biāo)識(shí)的內(nèi)容是否為空; 在所述標(biāo)識(shí)的內(nèi)容不為空時(shí),進(jìn)一步確定所述標(biāo)識(shí)內(nèi)容的字符串長度在設(shè)定范圍值內(nèi)。
7.如權(quán)利要求5所述的方法,其特征在于,根據(jù)確定的所述標(biāo)識(shí),從通用組件庫中查找所述標(biāo)識(shí)所表示的通用組件,具體包括 根據(jù)通用組件的實(shí)例的標(biāo)識(shí)與內(nèi)容指針之間的對應(yīng)關(guān)系,確定待調(diào)用的通用組件的實(shí)例的標(biāo)識(shí)對應(yīng)的內(nèi)容指針; 將確定的內(nèi)容指針?biāo)赶虻膶?shí)例作為查找出的通用組件的實(shí)例。
8.如權(quán)利要求7所述的方法,其特征在于,調(diào)用查找出的通用組件,具體包括 調(diào)用通用組件的實(shí)例入口,并運(yùn)行所述實(shí)例。
9.一種創(chuàng)建通用組件的設(shè)備,其特征在于,應(yīng)用于具有封裝后的組件的軟件系統(tǒng)中,包括 庫創(chuàng)建模塊,用于在軟件初始化時(shí),生成通用組件庫; 組件創(chuàng)建模塊,用于根據(jù)配置文件中記錄的通用組件的屬性信息,創(chuàng)建通用組件; 存儲(chǔ)模塊,用于將創(chuàng)建的通用組件以及該通用組件的標(biāo)識(shí)存儲(chǔ)至所述通用組件庫中。
10.一種調(diào)用通用組件的設(shè)備,其特征在于,包括 標(biāo)識(shí)確定模塊,用于確定待調(diào)用的通用組件的標(biāo)識(shí); 查找模塊,用于根據(jù)確定的所述標(biāo)識(shí),從已存儲(chǔ)多個(gè)通用組件的通用組件庫中查找所述標(biāo)識(shí)所表示的通用組件; 調(diào)用模塊,用于調(diào)用查找出的通用組件。
全文摘要
本申請公開了一種創(chuàng)建并調(diào)用通用組件的方法及設(shè)備,主要內(nèi)容包括在軟件初始化過程中完成通用組件的統(tǒng)一創(chuàng)建以及統(tǒng)一存儲(chǔ)在通用組件庫的過程,在其他普通組件需要調(diào)用通用組件時(shí),無需分別創(chuàng)建通用組件,而只需要直接調(diào)用已創(chuàng)建的通用組件即可,由于在本申請實(shí)施例的方案中,通用組件只需創(chuàng)建一次,減少了通用組件的創(chuàng)建數(shù)量,因此,可有效減少通用組件創(chuàng)建過程中占用的系統(tǒng)資源,且提高其他普通組件的運(yùn)行速度。
文檔編號(hào)G06F9/44GK102841780SQ20111017094
公開日2012年12月26日 申請日期2011年6月23日 優(yōu)先權(quán)日2011年6月23日
發(fā)明者唐紅兵 申請人:阿里巴巴集團(tuán)控股有限公司