?? c++中組件管理器的一個實現.txt
字號:
C++中組件管理器的一個實現
在軟件開發中,網絡上很多都認為編程一件體力活動,出入茅廬,俺也一直這么認為。雖然說編程是一個熟練程度的問題,但我認為,為什么不把它當著一門藝術,寫歌的也好,唱歌的也好,認真用自己的大腦做出的事情才是最好的。寫程序也好,為什么同是一個功能,較兩個熟練的人寫出來的代碼卻可能完全不一樣,表現在那兒呢?
代碼的可讀性,對代碼組織好的,寫出來的東西,邏輯清晰,有條不紊。要知道代碼并不只是你一個人在研讀,就算是研讀,時間長后你可能也會忘記,更何況是別人呢?;代碼的架構,這里我說的是架構而不是結構,可能別人會在這里專牛角尖!好的程序號碼,不僅結構清晰,而且架構更是靈活,易于擴展!說了這么多廢話,總算轉到本文正題了。
軟件重要的是對整個系統宏觀掌控上,一個好的軟件應該應有堅實的體系結構來支撐,這對軟件的開發以及后期的維護都將是一個直接成本上的核算。那么我們可能會設想:有沒有這樣一個系統,它只是一個框架,它提供的功能相當于一個容器,然后對容器中被激活的組件完成調用和相關的管理。事實上,現在有很多這樣的成熟框架系統,本文不打算去介紹哪些框架系統(俺知道的也沒那么多,精力也不夠,還是留著點,哈哈)。現在,我們用C++來討論一下如何實現這么一個組件容器,它應該實現如下功能:1。能夠裝載組件;2。能夠啟動組件,調用組件來完成相應的功能;3:在組件不用的時候,能夠把組件從容器移出,停止其所執行的一切功能。
根據上面描述的,怎么用C++一般類來實現這一功能呢?框架中要對置身于其中的組件實行統一的調用,那么對其中的組件應該做如下的限制:應該有統一的接口。不錯,容器的組件應該有統一的接口,這樣框架系統在調用組件的時候就不必知道它要調用那一類具體的組件,只需要執行組件實現的一般性通用接口即可。這和JAVA中Applet初始化啟動的原理是相似的。好了,到這里我們知道了實現的思路,下面用C++來說明具體的實現。
上面提到了通用的公共接口,那么,首先我們要實現這么一個文件(.h),定義這一系列通用接口。根據上面的分析,此文件至少應該包含這么幾個接口:初始化組件;啟動組件;停止組件;刪除組件。當然根據具體需要,你還可以加入其它的接口,比如暫停等。我們把這個文件命名為:RNConponent.h,記住,里面的接口都是純虛函數。
然后定義個組件池的管理類,此類主要完成容器中組件的管理,其應該完成如下功能:增加一個組件;移出一個組件;查找指定名稱或ID的組件;顯示容器中組件的相關信息。此文件我們命名為:RNConponent_Pool.h。
最后定義個組件容器管理類,這個類組要完成如下功能:根據提供的腳本文件對其內容進行解析處理(此腳本文件記錄了待掛接的組件的信息,當然也可以采用其它方式實現);取得一個組件池的引用(這里假定可以管理多個組件池,但是一般只有一個),此文件命名為:RNConponent_Manager.h,到這里,我們完成整個系統的關鍵部分的文件以及接口實現的定義。下面闡述一下怎么樣來完成一個具體的組件以及對其的加載和調用。
上面說了,沒一個組件都必須實現框架調用的公共接口,也就是文件RNConponent.h中定義的接口。所以,一個具體的組件,大概是這個樣子的:
class YourConponent : public RNConponent
{
public:
YourConponent();
virtual ~YourConponent();
/******** 初始化組件
* 參數:arv-參數個數;arg[]-參數數組
* 返回值:成功返回0;否則非0
*********/
virtual int InitConponent(int arv,char *arg[]);
/******** 運行組件
* 參數:無
* 返回值:成功返回0;否則非0
*********/
virtual int Start();
/******** 對組件執行退出操作以釋放資源
* 參數:無
* 返回值:成功返回0;否則非0
*********/
virtual int FiniComponent();
};
組件以一個動態庫實現,動態庫只有一個輸出接口:返回RNConponent類型的組件指針。
注意:這種對組件的加載有個缺點(有時候可能是致命的),需要對取得組件對象進行強制類型轉換!可以采用自注冊來解決這個問題。
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -