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:
①、某插件每次调用另一个插件的时候,只会生成一个实例,然后把实例存到内存当中,不会因为多次调用而生成多个服务实例。