0、概念
接口就是純虛函數類,也就是最終的服務的前身;
插件就是實現這個接口類的實現類,所以理論上有多少個實現類就有多少個插件。注意每個插件都有自己的注冊器Activator;
服務就是根據接口的實例,每生成一個服務就會調用一次注冊器的start。
一句話總結就是:把接口當做類,服務是根據類new出的對象,插件就是動態庫dll。
1、1對1
1個接口類由1個類實現,輸出1個服務和1個插件。
2、多對1
1個類實現了2個接口類,輸出2個服務和1個插件,無論想使用哪個服務最終都通過這同一個插件來實現
3、1對多
1接口由2個類實現,也就是某一個問題提供了2種解決思路,輸出1個服務和2個插件,通過ctkPluginConstants::SERVICE_RANKING和ctkPluginConstants::SERVICE_ID來調用不同的插件。這里雖然有兩個插件,但都是被編譯到同一個dll中的。
ps:
①、某插件每次調用另一個插件的時候,只會生成一個實例,然后把實例存到內存當中,不會因為多次調用而生成多個服務實例。