1. 程式人生 > >C++基礎學習之10

C++基礎學習之10

        相信有過大型軟體開發經驗的人都會熟悉 外掛開發(Plugin),這是一種輕核心的開發機制,通過獨立的外掛開發能夠將不同的外掛功能進行組合,從而實現靈活的即插即用

        目前支援外掛功能的軟體非常多,從Linux下的 Vim、Emacs、Sublime編輯器,到windows下的PS、3DMax、Maya、AutoCAD,再到 ArcGIS,幾乎每個行業的軟體都會有外掛開發的影子,這些軟體無一不是通過支援外掛的方式來進行擴充套件,這種機制到底有什麼好處呢?

1. 主模組獨立(Exe和Core DLL),新增外掛時 不需要重新編譯更新;

2. 外掛之間功能相對獨立,依賴性小,便於分散式開發;

3. 外掛更新、擴充套件相對容易;


        一個典型的外掛示例程式碼如下:

/** PluginInterface,外掛介面類*/
class MainFrame; // 主程式框架
class PluginInterface
{
public:
    virtual void install(){ m_bInstalled = true; };
    virtual void unstall(){ m_bInstalled = false; };

    virtual MainFrame* getMainFrame();

protected:
    bool m_bInstalled;
};

/** PluginManager,外掛管理類*/
class PluginManager
{
public:
    void installPlugins(); // 初始化載入所有外掛
    void unstallPlugins(); // 反初始化解除安裝所有外掛

protected:
    std::vector<PluginInterface*> m_vecPlugins;
    MainFrame* m_pMainFrame;
};
        PluginInterface 作為外掛介面類,如果想要實現新的外掛,只需要繼承該介面,並實現裡面對應的方法,比如 install 和 install,當繞也可以擴充套件功能實現,然後實現對應的方法。

        對於C++的DLL,可以通過封裝動態載入的方式進行,當然對於其他一些語言或庫,比如 java、QT等,都實現了自己的外掛(DLL)載入方式,可以直接呼叫,這裡作者就不再多說了。

        留給大家一個測試,結合前面的章節《C++基礎學習之8 - 玩轉DLL》,實現一個自己的外掛吧!還等什麼呢?趕緊行動起來!