我对此方案有设计问题:
假设您有一个表单,其中包含许多要填充的网站,让我们将每个网站称为插件。
在其他类中,我创建了一个PluginManager
类,它可以获取所有插件的证据并提供一些功能和属性:
class PluginManager
{
...
BasePlugin CurrentPlugin {get;set;}
IEnumerable<BasePlugin> OpenedPlugins {}
bool SetPlugin() {..}
...
}
class BasePlugin {}
class MyPlugin : BasePlugin {}
在其他方面,它处理显示所选插件/网站。
到目前为止,我从未需要在2个或更多插件之间进行通信。现在我做了,我想问你,你会怎么做。
我的意见是将Event
添加到BasePlugin
类并在PluginsManager
类中处理它,以某种方式,提升Event
的插件将提供EventArgs
应该受影响的所有其他插件的类型以及指向应该执行的方法的delegates
列表。
答案 0 :(得分:2)
查看"Chain Of Responsibility" Pattern。该插件调用管理器从任何地方获取一些信息。管理器要求每个插件将信息放入提供的接口。 (什么是Visitor Pattern)。
电贺 FLO
答案 1 :(得分:1)
对我来说听起来像是Mediator Pattern(有关C#代码的说明,另请参阅here。)
中介类处理其他类之间的通信。您的PlugInManager
类将具有私有Mediator
实例,并且所有插件都将向调解器注册以接收通信。
可能有101种方法可以做到这一点,所以期待各种答案。